2010-08-31 68 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