我应该在哪个时间以及在哪个上下文中调用ThreadPool.SetMinThreads

时间:2012-11-08 16:26:35

标签: c# multithreading asynchronous delegates threadpool

我有一个ASP .NET MVC 2 - 应用程序,它调用C#-DLL的函数。

DLL本身是多线程的。在最坏的情况下,它最多使用200个线程,这些线程运行时间不长。

我使用异步委托来生成线程。为了加快委托的初始化,我事先计算了我需要的线程数并将它交给ThreadPool:

ThreadPool.SetMinThreads(my_num_threads, ...); 

我只是想知道,如果我需要尽早做到这一点,那么ThreadPool有足够的时间来创建线程?我是否必须考虑何时我设置了ThreadPool的大小,或者在我调用SetMinThreads后是否可以使用线程?

此外,如果我在我的ASP .NET MVC应用程序中设置DLL之外的大小(在我调用DLL之前),这个设置是否可用于DLL?

1 个答案:

答案 0 :(得分:1)

它们共享相同的应用程序域,因此在任何地方设置ThreadPool都会影响所有域。请注意,这也会影响ASP.NET框架,该框架将使用ThreadPool本身进行所有自己的异步任务等。

考虑到这一点,如果你大致知道你想要的最小线程数,你可以在应用程序启动时设置它,以备日后使用。

然而,200个线程看起来有些过分,为了把它放到我的Chrome上,大约8个标签打开使用大约35和我的SQL Server~50。你在做什么需要这么多?

同时意识到最终你会达到一个性能会降低的极限,因为有很多线程必须服务。微软在MSDN上说这样:

  

您可以使用SetMinThreads方法增加最小线程数。但是,不必要地增加这些值可能会导致性能问题。如果太多任务同时启动,则所有任务可能看起来都很慢。在大多数情况下,线程池将使用自己的算法来分配线程,从而表现更好。将最小值降低到小于处理器数量也会影响性能。