2014-04-10 77 views
2

我已經看了幾個看似相關的帖子不提供一個解決方案(或解決方案,幫助我的情況):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利用率的巨大差異,我正在看。

回答

2

我也終於想通了什麼事......

下IIS 8.5控制面板的IIS部分有一個「壓縮」功能。 在那裏,有2個選項默認選中;

  • 啓用動態內容壓縮
  • 啓用靜態內容壓縮

這樣看來,「動態內容壓縮」是罪魁禍首,取消選中此選項導致類似的CPU利用率到的控制檯應用程序。

重新檢查此選項時,實際上會警告您可能會導致更高的CPU利用率。

相關問題