繁体   English   中英

我应该在什么时间和上下文中调用ThreadPool.SetMinThreads

[英]At which time and in which context should I call ThreadPool.SetMinThreads

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

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

我使用异步委托来生成线程。 为了加快委托的初始化,我预先计算了所需的线程数,并将其提供给ThreadPool:

ThreadPool.SetMinThreads(my_num_threads, ...); 

我只是想知道,是否需要足够早地这样做,以便ThreadPool有足够的时间创建线程? 设置ThreadPool的大小是否需要考虑,还是在调用SetMinThreads之后立即可用的线程?

此外,如果我在ASP .NET MVC应用程序中将DLL的大小设置为超出DLL的大小(在调用DLL之前),则该设置对DLL可用/可见吗?

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

考虑到这一点,如果您大致了解所需的最小线程数,则可以在应用程序启动时进行设置,以备后用。

但是,要使用200个线程似乎有些多余,要将其打开,大约8个选项卡打开的Chrome使用35个线程,而使用SQL Server则大约50个线程。 您在做什么呢?

还应意识到,最终将达到性能下降的极限,因为必须服务的线程太多。 微软在MSDN上这样说:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM