【问题标题】:At which time and in which context should I call ThreadPool.SetMinThreads我应该在哪个时间和哪个上下文中调用 ThreadPool.SetMinThreads
【发布时间】:2012-10-28 21:31:16
【问题描述】:

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

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

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

ThreadPool.SetMinThreads(my_num_threads, ...); 

我只是想知道,我是否需要尽早执行此操作,以便 ThreadPool 有足够的时间来创建线程?我是否必须考虑,何时我设置了 ThreadPool 的大小,或者在我调用 SetMinThreads 后线程是否立即可用?

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

【问题讨论】:

    标签: c# multithreading asynchronous delegates threadpool


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多