CPU使用率高达75%,同时使用WCF服务流式传输300 MB文件

时间:2010-08-31 10:30:09

标签: c# asp.net wcf

我有一个用于下载文件的wcf服务。它工作正常(最后),但我可以看到,当它下载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();

1 个答案:

答案 0 :(得分:1)

在这一行:

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

您是否正在处理未经注意的数据,即时抓取它。如果是这样可能是你的问题。压缩数据可能会占用大量CPU资源。作为一个不必要的测试,尝试简单地将原始数据发送到bowser并查看CPU使用率是否下降。如果您正在快速压缩并且发送未压缩的数据会减少CPU负载,那么您有两个现实的选择。

  1. 确保您有足够的服务器基础设施来执行此操作。

  2. 将您的文件压缩离线,这样他们就可以排队,这样多人同时访问服务就不会杀死服务器。然后,您可以将zip文件保存在临时文件夹中,并在处理完毕后向用户发送链接或类似信息。