我已經看了幾個看似相關的帖子不提供一個解決方案(或解決方案,幫助我的情況):WCF串流播放下載 - 高CPU使用率在IIS託管VS控制檯
CPU usage goes upto 75% while stream a 300 MB file using WCF service
High CPU load using WCF streaming
所以我希望有人可以幫助。
我已經把一個WCF服務使用.NET 4.5便於大文件的上傳和下載(幾百MB的,以綠帶。)
我現在用的是「流」 TransferMode在basicHttpBinding的沒有安全。
一切工作正常,但是,我注意到在IIS中承載的服務的CPU利用率與自行託管在控制檯應用程序中的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利用率的巨大差異,我正在看。