假设,我没有通过调用函数显式设置任何值:
System.Threading.ThreadPool.SetMaxThreads
默认值是多少?
最佳答案
这取决于 .NET 框架版本,在 2.0、3.0 和 4.0 中发生了变化。在 2.0 中,它是核心数量的 50 倍。在 3.0(又名 2.0 SP1)中,它是内核数量的 250 倍,4.0 使其根据位数和操作系统资源动态变化。如果我没记错的话,最大 I/O 完成线程数始终为 1000。
一般来说,它非常高,一个程序应该永远接近。在 32 位机器上,当所有这些线程用它们的 1 兆字节堆栈消耗可用的虚拟内存时,程序很可能首先用 OOM 轰炸。一般来说,只有当有很多 TP 线程请求并且正在运行的请求在 分钟 内未完成时,它才会失控。 TP 线程的理想状态是不超过半秒。
“调试”>“Windows”>“线程”调试器窗口讲述了一个令人不快的事实。并很好地提示了为什么这些 TP 线程没有完成,您可以看到它们的调用堆栈。
关于c# - System.Threading.ThreadPool.SetMaxThreads 的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10947700/