我希望改进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不允许这样做。
我需要能够在不压缩文件的情况下执行此操作。
我正在考虑尝试返回一个由多个连接流组成的流,但我不确定是否有更好的方法。
答案 0 :(得分:3)
我会更改您的WCF方法以接受文件名集合(即List<string>
或string[]
),然后打包它们。我知道SharpZipLib可以很好地生成ZIP文件。
您将ZIP文件流回客户端,然后客户端将其解压缩并处理文件。
一个更大的文件应该快几个数量级,以便在带宽上传输和更轻(因为你处理的网络相关开销较少),更不用说你有一个单个WCF调用而不是每个文件一个(一个巨大的瓶颈)。