7

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

所以我发现System.Threading.ThreadPool- 看起来它应该可以解决问题,但是......

网络上的各种教程,例如使用此定义池的教程,John Skeet 的 MiscUtils中的教程,以及本教程中引用的有关异步模式的自定义线程池。

System.Threading.ThreadPool自 1.1 以来就存在 - 为什么人们经常觉得有必要编写一个全新的?我应该避免使用System.Threading.ThreadPool吗?

在线程方面,我是一名初级初学者,所以请轻松使用未定义的行话。

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

4

1 回答 1

3

这是我在该主题上找到的内容。为什么不应该在 ASP.NET http://madskristensen.net/post/Done28099t-use-the-ThreadPool-in-ASPNET.aspx中使用 ThreadPool 。它已经很老了,但我认为它没有太大变化。或者,如果我错了,请纠正我。

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

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

于 2011-11-16T16:19:19.387 回答