2013-12-20 19 views
0

在我的一个应用程序中,我必须使用多个线程。 作为一种更好的方法,我用ThreadPool替换了一个线程队列。使用指南:ThreadPool.SetMaxThreads和ThreadPool.SetMinThreads在C#

在表格的开始,我设定最小/最大线程如下:

ThreadPool.SetMaxThreads(20,20) 
    ThreadPool.SetMinThreads(1,1) 

后来在使用中,我使用ThreadPool如下:

Function() 
{ 
     ThreadPool.QueueUserWorkItem(new WaitCallback(Action), arguments); 
} 

我没有使用任何形式的DeQueue

将有助于充分,如果有一个人能够分享他们的ThreadPool(专门设置最小/最大接口)

问候经验, 萨钦

+0

您使用的C#版本是什么? – AlexH

回答

2

一般来说,不建议改变线程池的大小。来自MSDN:

更改线程 池中的最大线程数时请谨慎使用。虽然您的代码可能会受益,但这些更改可能会对您使用的代码库产生不利的影响。

如果公共语言运行库是托管的,例如通过Internet信息服务(IIS)或SQL Server,则主机可以限制或防止更改线程池大小。

CLR或主机(例如IIS)会根据您的应用程序的线程模式来决定是增加还是减少线程池大小,所以如果我是你,我不会打扰这些数字。

希望这会有所帮助。

+0

您好Volpav,感谢您的提供。继续查询:如果我知道我的应用程序可能会同时爆发大约20个线程,那么将线程池大小保持为默认值不会有风险。这里将运行的程序是一般用户程序。所以我怀疑它可能会自动更改线程池。你能建议吗? – SachinD

+0

@SachinD我明白你的顾虑,但我仍然认为你的情况没有什么可担心的。 IIS6的默认线程池大小为CPU_20个线程(这意味着如果您有多核/多处理器硬件,则限制更高)。我不确定,但我认为在IIS7中,这个数字上升到了大约50个线程。另外,你是否遇到了解决线程池大小增加的实际问题?我们都知道,过早的优化是万恶之源;干杯! – volpav

+1

你好Volpav,谢谢你提供的信息。最后,我决定使用默认的线程池大小,而不是将其写入。我的问题已解决。查看线程池的原因是:我在现有代码中存在内存泄漏(在源代码本身管理的线程队列)。线程池之后没有看到内存泄漏。 – SachinD