我有一个ASP.NET页面,其伪代码如下:
while (read)
{
Response.OutputStream.Write(buffer, 0, buffer.Length);
Response.Flush();
}
任何请求此页面的客户端都会开始下载一个二进制文件。到此为止一切都正常,但是客户端没有下载速度的限制,所以将上面的代码更改为:
while (read)
{
Response.OutputStream.Write(buffer, 0, buffer.Length);
Response.Flush();
Thread.Sleep(500);
}
现在速度问题已经解决了,但是当有100个并发的客户端一个接一个地连接(每个新连接之间有3秒的延迟)进行测试时,当客户端数量增加时CPU使用率也会增加,当有70~80个并发客户端时,CPU达到100%,任何新的连接都被拒绝。在其他机器上可能会有不同的数字,但问题是为什么Thread.Sleep()如此耗费CPU资源,是否有任何方法可以在不增加CPU占用率的情况下减缓客户端的速度?
我可以在IIS级别上做到这一点,但是我需要更多来自我的应用程序内部的控制。