2010-08-31 72 views
0

我有一個用於下載文件的wcf服務。它的工作正常(最後),但我可以看到,當它下載CPU使用率約75%。使用WCF服務傳輸300 MB文件時,CPU使用率高達75%

請告知

客戶端代碼

FileTransferServiceClient obj = new FileTransferServiceClient(); 
Byte[] buffer = new Byte[16 * 1024]; 
CoverScanZipRequest req = new CoverScanZipRequest(
    new string[] { "1", "2" }); 

CoverScanZipResponse res = new CoverScanZipResponse(); 
res = obj.CoverScanZip(req); 

int byteRead = res.CoverScanZipResult.Read(buffer, 0, buffer.Length); 
Response.Buffer = false; 
Response.ContentType = "application/zip"; 
Response.AddHeader("Content-disposition", 
    "attachment; filename=CoverScans.zip"); 

Stream outStream = Response.OutputStream; 
while (byteRead > 0) 
{ 
    outStream.Write(buffer, 0, byteRead); 
    byteRead = res.CoverScanZipResult.Read(buffer, 0, buffer.Length); 
} 
res.CoverScanZipResult.Close(); 
outStream.Close(); 
+0

你想要多高? – starskythehutch 2010-08-31 10:31:39

+0

如果沒有進一步的細節,幾乎不可能提供任何建議。請給我們一些代碼。 – 2010-08-31 10:34:38

+0

通常我不喜歡它超過40-50%。 – Amit 2010-08-31 10:35:18

回答

1

在這一行:

byteRead = res.CoverScanZipResult.Read(buffer, 0, buffer.Length); 

你服用uncomressed數據,荏苒它的飛行。如果是這樣,那很可能是你的問題。壓縮數據可能相當耗費CPU資源。作爲一個不可測試的測試,試着簡單地將原始數據發送給bowser,看看CPU使用率是否下降。如果您正在進行壓縮並且發送未壓縮的數據會減少CPU負載,那麼您有兩個切實可行的選項。

  1. 請確保您有足夠的服務器基礎設施來執行此操作。

  2. 將你的文件脫機排隊,這樣他們可以排隊,多人同時訪問服務不會殺死服務器。然後,您可以將zip文件保存在臨時文件夾中,並在處理完成後向用戶發送鏈接或類似郵件。

+0

本,感謝您的答覆。我可以確認我沒有在進行任何壓縮。我所做的是從磁盤讀取約300MB的zip文件並從客戶端下載 – Amit 2010-08-31 12:04:45