2012-11-08 87 views
0

我有一个ASP .NET MVC 2-应用程序,它调用C#-DLL的函数。我应该在哪个时间和哪个上下文中调用ThreadPool.SetMinThreads

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

我使用异步委托来生成线程。为了加快了代表们的初始化,我计算的线程数,我需要提前给它的线程池:

ThreadPool.SetMinThreads(my_num_threads, ...); 

我会想,如果我需要做早期,足量,使得ThreadPool有足够的时间来创建线程?我必须考虑,我设置了ThreadPool的大小还是在我调用SetMinThreads后立即可用的线程?此外,如果我在我的ASP .NET MVC-应用程序(在我调用DLL之前)中设置DLL的外部大小,该设置对于DLL是可用/可见的吗?

回答

1

它们共享相同的应用程序域,以便将ThreadPool设置到任何位置都会影响所有域。请注意,这也会影响ASP.NET框架,它将使用ThreadPool本身来执行所有自己的异步任务等。

考虑到这一点,如果您大致知道所需的最小线程数,则可以在应用程序启动准备好以后使用。

但是,200个线程似乎有点过分,为了将它放到上下文中,我的Chrome大约8个标签打开使用约35和我的SQL Server〜50。你在做什么要求这么多?

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

您可以使用SetMinThreads方法来增加最小线程数。但是,不必要地增加这些值可能会导致性能问题。如果太多的任务在同一时间开始,所有这些任务似乎都很慢。在大多数情况下,线程池会使用自己的算法分配线程,从而获得更好的性能。将最小值减小到小于处理器数量也会损害性能。

相关问题