0

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

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

我使用异步委托来生成线程。为了加快delegate的初始化,我提前计算好需要的线程数,交给ThreadPool:

ThreadPool.SetMinThreads(my_num_threads, ...); 

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

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

4

1 回答 1

1

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

考虑到这一点,如果您大致知道所需的最小线程数,您可以在应用程序启动时设置它以供以后使用。

但是,200 个线程似乎有些过多,将其放入上下文中,我的 Chrome 打开了大约 8 个选项卡,使用大约 35 个,我的 SQL Server 大约 50 个。你在做什么要求这么多?

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

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

于 2012-11-08T16:43:27.883 回答