下载大量小文件

本文关键字:文件 小文 下载 | 更新日期: 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调用而不是一个文件调用(这是一个巨大的瓶颈)。