Mat*_*tin 7 c# asp.net asynchronous ihttpasynchandler threadpool
我正在为ASP.NET创建一个异步处理程序,它将执行一个缓慢的存储过程.我想我理解为了在慢速和快速页面的混合加载上获得额外的吞吐量,慢速页面需要在与ASP.NET使用的线程池分开的线程池上执行,否则异步模式将导致两倍的数量使用稀缺的线程(如果我错了,请纠正我).
所以我发现System.Threading.ThreadPool- 看起来应该这样做,但......
在网络上的各种教程,如这一个使用这种定制池,一个在约翰飞碟双向的MiscUtils,并在此引用的自定义线程池教程的异步模式.
System.Threading.ThreadPool自1.1以来就存在 - 为什么人们经常觉得有必要写一个全新的?我应该避免使用System.Threading.ThreadPool吗?
在涉及线程时,我是初学者,所以在未定义的术语上轻松一点.
更新.要执行的存储过程不一定是MS-SQL,也不一定能使用内置的异步方法,如BeginExecuteNonQuery().
这是我在该主题上发现的内容。为什么不应该在 ASP.NET 中使用 ThreadPool http://madskristensen.net/post/Done28099t-use-the-ThreadPool-in-ASPNET.aspx。它很旧,但我认为它没有太大变化。或者如果我错了请纠正我。
使用 System.Threading.ThreadPool 或自定义委托并调用其 BeginInvoke 提供了一种为应用程序启动工作线程的快速方法。但不幸的是,它们会损害应用程序的整体性能,因为它们消耗 ASP.NET 用来处理 HTTP 请求的同一池中的线程。
借助 System.Threading.Thread 类使用自定义线程应该可以解决问题,因为创建的线程不属于应用程序池的一部分。