1

我正在编写具有限速功能的文件传输处理程序,该速率基于用户级别。如何控制/计算 HttpHandler 中的传输速率?

一些 asp.net 资源告诉我使用 Thread.Sleep 会阻塞 asp.net 线程池。

4

2 回答 2

2

休眠 ASP .NET 中的任何线程通常不是一个好主意,因为这些线程可以用于为来自池的请求提供服务。如果说池中有 10 个线程,正在处理下载的 10 个线程休眠将导致所有其他请求堆积在队列中,直到下载完成。

最好通过创建 IHttpAsyncHandler 而不是 IHttpHandler 来为您服务,如下所述:

http://msdn.microsoft.com/en-us/library/ms227433.aspx

您可以使用计时器定期将 x 字节的数据泵送到客户端(但请确保使用 IsClientConnected 或类似的方法定期收集已关闭的连接)。

于 2008-12-14T12:00:37.723 回答
0

您可能想尝试使用计时器和计时器回调来执行此操作。这个想法是有一个计时器(或两个)来触发您的处理程序何时可以运行以及运行多长时间。每次“go”计时器到期时,它都会启动一个线程,将您的数据写入响应,直到“stop”计时器到期(或相同的计时器再次到期),然后该线程完成它正在做的事情,为下一个线程,重置“go”计时器,然后退出。您的主线程只是设置初始计时器,传输数据,然后调用计时器并退出。大概您需要在某处保留对响应的句柄,以便您可以再次访问它。通过改变处理程序必须等待/执行的时间长度,您可以控制它使用多少资源。

于 2008-12-06T04:04:55.953 回答