我有一个用于下载文件的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();
答案 0 :(得分:1)
在这一行:
byteRead = res.CoverScanZipResult.Read(buffer, 0, buffer.Length);
您是否正在处理未经注意的数据,即时抓取它。如果是这样可能是你的问题。压缩数据可能会占用大量CPU资源。作为一个不必要的测试,尝试简单地将原始数据发送到bowser并查看CPU使用率是否下降。如果您正在快速压缩并且发送未压缩的数据会减少CPU负载,那么您有两个现实的选择。
确保您有足够的服务器基础设施来执行此操作。
将您的文件压缩离线,这样他们就可以排队,这样多人同时访问服务就不会杀死服务器。然后,您可以将zip文件保存在临时文件夹中,并在处理完毕后向用户发送链接或类似信息。