【发布时间】:2014-04-10 21:00:02
【问题描述】:
我查看了一些看似相关的帖子,但没有提供解决方案(或对我的情况有帮助的解决方案):
CPU usage goes upto 75% while stream a 300 MB file using WCF service
High CPU load using WCF streaming
所以我希望有人可以提供帮助。
我已经使用 .NET 4.5 组合了一个 WCF 服务,以促进大文件(数百 MB 到 GB)的上传和下载。
我在没有安全性的 BasicHttpBinding 上使用“流式”传输模式。
一切正常,但是,我注意到在 IIS 中托管与在控制台应用程序中自行托管时服务的 CPU 利用率存在巨大差异。
在控制台应用程序中,利用率低于 20%,而在 IIS 中,利用率超过 80% - 这是单实例下载。
服务在两个场景中的配置方式相同,并且都在同一个盒子上运行。
我的绑定配置如下:
<binding name="UnsecuredStreamBinding"
receiveTimeout="00:30:00"
sendTimeout="00:30:00"
transferMode="Streamed"
maxReceivedMessageSize="53687091200" maxBufferSize="65536" /> <!--50GB-->
服务代码也很简单:
...
var fileStream = File.OpenRead(filename);
var size = fileStream.Length;
var response = new DownloadResponse
{
FileStream = fileStream,
Size = size,
};
return response;
DownloadResponse 被定义为 MessageContract。
我几乎没有改变默认的 IIS 环境(Windows Server 2012 R2 上的 IIS 8.5) 记录/诊断已关闭,因此不会增加开销。
这是我第一次涉足 Web 服务开发,所以我知道有很多我不知道的东西,我希望我错过了一些相当简单的东西,这可以解释我在 CPU 利用率方面的巨大差异看到了。
【问题讨论】: