我看过一些看似相关的帖子,这些帖子没有提供解决方案(或者有助于我解决问题的解决方案):
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)。
我正在使用" Streamed"没有安全性的BasicHttpBinding上的TransferMode。
一切正常,但是,我注意到在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利用率差异。
答案 0 :(得分:2)
我终于弄清楚发生了什么......
在IIS 8.5控制面板的IIS部分下,有一个&#34;压缩&#34;特征。 在那里,有两个选项默认选中;
似乎&#34;动态内容压缩&#34;应该责怪,取消选中此选项会导致CPU利用率与控制台应用程序的CPU利用率相似。
重新检查此选项时,实际上会警告您可能会导致更高的CPU利用率。