下载大量小文件
本文关键字:文件 小文 下载 | 更新日期: 2023-09-27 17:50:28
我希望改进WCF客户端/服务器,使其能够处理大量小文件,比目前更快。
我已经编写了一个WCF客户端和一个服务器来跨网络移动文件。
我通过从客户端调用服务器(发送我想要下载的文件的名称作为参数),然后让服务器返回一个流
来工作。简化的例子:
//CLIENT CODE>>
Stream stream = syncService.GetStream(fileName);
//<<CLIENT CODE
//SERVER CODE>>
public Stream GetStream(string fileName)
{
string filePathOnServer = ServerService.Service1.SERVER_FILES_PATH + fileName;
return File.OpenRead(filePathOnServer);
}
//<<SERVER CODE
我然后调用GetStream递归如果我需要得到几个文件,并将流保存到文件在客户端机器上。当移动少量大文件时,它可以接受我遇到的问题是,下载单个文件的开销大约是1/10秒,无论大小如何;所以如果我想下载大量1Kb的文件,我基本上被限制到最大10kb。
我希望有人有一个替代实现的建议。我已经尝试从服务器返回一个流列表,但我收集到WCF不允许这样做。
我需要能够做到这一点,而不压缩文件。
我正在考虑尝试返回一个由多个流连接组成的流,但我不确定是否有更好的方法。
我会改变你的WCF方法接受文件名的集合(即:List<string>
或string[]
),然后打包。我知道SharpZipLib可以很好地生成ZIP文件。
您将ZIP文件流式传输回客户机,客户机将依次解压缩并处理文件。
更大的文件传输的速度应该要快几个数量级,占用的带宽也应该更少(因为这样可以减少与网络相关的开销),更不用说只有一个WCF调用而不是一个文件调用(这是一个巨大的瓶颈)。