下载大量的小文件

时间:2013-01-03 14:17:16

标签: c# wcf client-server

我希望改进WCF客户端/服务器,以便它能够处理大量小文件,比现在更快。

我编写了一个WCF客户端和一台服务器来通过网络移动文件。

我通过从客户端到服务器的调用(发送我想要下载的文件的名称作为参数),然后让服务器返回Stream

来实现它的工作

简化示例:

//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文件,我的上限基本上是10Kbs。

我希望有人建议进行替代实施。 我已经尝试从服务器返回一个Streams列表,但我认为WCF不允许这样做。

我需要能够在不压缩文件的情况下执行此操作。

我正在考虑尝试返回一个由多个连接流组成的流,但我不确定是否有更好的方法。

1 个答案:

答案 0 :(得分:3)

我会更改您的WCF方法以接受文件名集合(即List<string>string[]),然后打包它们。我知道SharpZipLib可以很好地生成ZIP文件。

您将ZIP文件流回客户端,然后客户端将其解压缩并处理文件。

一个更大的文件应该快几个数量级,以便在带宽上传输更轻(因为你处理的网络相关开销较少),更不用说你有一个单个WCF调用而不是每个文件一个(一个巨大的瓶颈)。