0

我有一个服务,它有一种从客户端向服务发送文件的方法。我注意到,当我在同一台机器上运行客户端和服务并且我要发送的文件也在本地机器上时,一切都运行得非常快。

但是,我的客户端和服务在同一台机器上,但文件在另一台计算机上,那么速度很慢。

如果我将文件从一台计算机复制到另一台计算机,速度很快,所以问题似乎不是带宽。

我尝试使用 tcp 和 basicHttp Binding,但结果是一样的。

如果客户端在其他计算机上,我尝试发送时也会出现此问题。

谢谢。

编辑:如果我打开任务管理器,在计算机的网络选项卡中运行客户端,我可以看到网络的使用率约为 0.5%。为什么?

4

1 回答 1

2

传输大文件的 WCF 不是最佳方法,因为 WCF 有很多层和开销,这些层和开销加起来会导致文件传输延迟。此外,您可能没有编写 WCF 服务来连续读取字节块并写入响应。您可能正在执行 File.ReadAll 然后只返回整个字符串,这将导致服务器上的大量同步读取、大量内存分配,然后将大字符串写入 WCF 缓冲区,进而写入 IIS缓冲区等。

传输大文件的最佳方式是使用 HttpHandlers。您可以只使用 Response.TransmitFile 来传输文件,IIS 将以最佳方式传输文件。否则,您始终可以一次读取 8k,然后写入响应流并在每次写入 8k 后调用 Flush 。

如果你因为任何奇怪的原因不能使用 HttpHandler,你能告诉我 WCF 代码吗?

另一件事。当 IIS 出现在图片中时,您可能期望的性能根本不可能。首先,如果您只是将文件直接托管在网站上并通过执行 WebClient.downloadString 下载文件,您应该测量 IIS 传输文件需要多长时间。

另一件事是,你是如何下载的?通过浏览器?或通过客户端代码?如果您尝试一次性传输整个文件并尝试将其保存在字符串中,客户端代码也可能不是最佳的。例如,WebClient.DownloadString 将是最糟糕的方法。

于 2012-07-09T14:51:27.083 回答