c# - System.Threading.ThreadPool.SetMaxThreads 的默认值

标签 c# .net default threadpool

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

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/

相关文章:

C# OleDB SQL 插入命令

c# - 返回一个已经从 WCF 格式化为 JSON 的字符串

sql - 创建 SQL 表,其中 DATETIME 或 INT 上的空字符串不默认

c# - Anchor onclick 不应该重新加载页面而是触发 javascript?

c# - 接口(interface) "IRepository<T>"的正确文件名是什么

c# - 为什么 RijndaelManaged 每次返回的密文都不一样?

c# - WhenAll 与 WaitAll 并行

sql - SybaseDB ,更改表中现有列的默认值

java - 如果Java中的 "protected"字给你与默认访问相同的访问权限,那么它有什么意义呢?

c# - log4net logger wrapper 的实现和使用