Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 何时使用System.Threading.ThreadPool以及何时使用多个自定义线程池之一?_C#_Asp.net_Asynchronous_Threadpool_Ihttpasynchandler - Fatal编程技术网

C# 何时使用System.Threading.ThreadPool以及何时使用多个自定义线程池之一?

C# 何时使用System.Threading.ThreadPool以及何时使用多个自定义线程池之一?,c#,asp.net,asynchronous,threadpool,ihttpasynchandler,C#,Asp.net,Asynchronous,Threadpool,Ihttpasynchandler,我正在为ASP.NET创建一个异步处理程序,它将执行一个缓慢的存储过程。我想我知道,为了在慢速和快速页面的混合负载上获得额外的吞吐量,慢速页面需要在与ASP.NET使用的线程池分开的线程池上执行,否则异步模式将导致使用的稀缺线程数加倍(如果我错了,请纠正我) 所以我发现-看起来它应该会起作用,但是 网络上的各种教程,例如使用此、中的教程以及本文中引用的自定义线程池 System.Threading.ThreadPool从1.1开始就存在了-为什么人们总是觉得有必要编写一个全新的?我应该避免使用S

我正在为ASP.NET创建一个异步处理程序,它将执行一个缓慢的存储过程。我想我知道,为了在慢速和快速页面的混合负载上获得额外的吞吐量,慢速页面需要在与ASP.NET使用的线程池分开的线程池上执行,否则异步模式将导致使用的稀缺线程数加倍(如果我错了,请纠正我)

所以我发现-看起来它应该会起作用,但是

网络上的各种教程,例如使用此、中的教程以及本文中引用的自定义线程池

System.Threading.ThreadPool
从1.1开始就存在了-为什么人们总是觉得有必要编写一个全新的?我应该避免使用
System.Threading.ThreadPool

说到线程,我是一个一流的初学者,所以对未定义的术语要轻描淡写


更新。要执行的存储过程不一定是MS-SQL,也不一定能够使用内置的异步方法,例如
BeginExecutenQuery()

以下是我在本主题中找到的内容。为什么不应该在ASP.NET中使用线程池。它很老了,但我认为变化不大。如果我错了就纠正我

使用System.Threading.ThreadPool或自定义委托并调用其BeginInvoke可以快速启动应用程序的工作线程。但不幸的是,它们损害了应用程序的整体性能,因为它们使用ASP.NET用于处理HTTP请求的同一池中的线程


在System.Threading.Thread类的帮助下使用自定义线程应该可以解决这个问题,因为创建的线程不是应用程序池的一部分。

我觉得应该使用异步页面来实现这一点。在我看来,为存储过程调用之类的东西重新设计线程机制会适得其反。使用受支持的最佳实践是最好的。我建议仅对需要自定义线程模式的特定模式(如COM单元)使用自定义线程模式。您不需要使用单独的线程池(而不是ASP.NET),因为当您的存储过程是I/O绑定时,执行它的线程将用于其他请求@吉姆:你提到的那篇文章或多或少同意你的答案,尤其是最后一段。(即,要么使用内置异步方法,如BeginExecutenQuery,不使用ASP.NET线程,要么使用新的线程/自定义池)