假设我没有通过调用函数显式设置任何值:
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 MB 堆栈消耗可用虚拟内存时,程序很可能首先因 OOM 而崩溃。一般来说,只有当有大量 TP 线程请求并且正在运行的线程在分钟内没有完成时,它才会失控。 TP 线程的理想情况是不超过半秒。 “调试”>“窗口”>“线程”调试器窗口讲述了令人不快的事实。并给出了很好的提示为什么这些 TP 线程没有完成,你可以看到它们的调用堆栈。
GetMaxThreads()
找到它