System.Threading.ThreadPool.SetMaxThreads的默认值

时间:2012-06-08 11:09:50

标签: c# .net default threadpool

假设我没有通过调用函数显式设置任何值:

System.Threading.ThreadPool.SetMaxThreads

默认值是什么?

3 个答案:

答案 0 :(得分:18)

这取决于.NET框架版本,在2.0,3.0和4.0中已更改。在2.0中它是核心数量的50倍。在3.0(又名2.0 SP1)中,它是内核数量的250倍,4.0根据位数和操作系统资源使其动态化。如果我没记错的话,Max I / O完成线程总是1000。

一般情况下,它非常高,程序应该永远不会接近。在一台32位计算机上,当所有这些线程都使用一兆字节的堆栈消耗可用的虚拟内存时,该程序很可能首先使用OOM进行轰炸。一般情况下,只有当有很多TP线程请求而且正在运行的那些请求没有完成分钟时,它才会失控。 TP线程的理想选择是不要超过半秒。

调试> Windows>线程调试器窗口告诉不愉快的事实。并给出了一个非常好的提示,为什么这些TP线程没有完成,你可以看到他们的调用栈。

答案 1 :(得分:3)

  

每个进程有一个线程池。从.NET开始   框架版本4,进程的线程池的默认大小   取决于几个因素,例如虚拟地址的大小   空间。进程可以调用GetMaxThreads方法来确定   线程数。线程池中的线程数可以是   通过使用SetMaxThreads方法更改。每个线程使用   默认堆栈大小并以默认优先级运行。   块引用

     

承载.NET Framework的非托管代码可以更改其大小   线程池使用CorSetMaxThreads函数,在。中定义   mscoree.h文件。

答案 2 :(得分:1)

它不是固定数字,它取决于可用内存和其他因素 - 您可以在运行时使用GetMaxThreads()

找到它