我们的产品会消耗大量的windows资源,比如socket句柄、内存、线程等等。通常有 700-900 个活动线程,但在某些情况下产品可以快速创建新线程并做一些工作,然后关闭它。我遇到了我们产品的崩溃内存转储。使用~* windbg 命令,我可以看到 817 个活动线程,但是当我运行!handle命令时,它会打印出以下摘要:
类型计数 无 15 事件 2603 第 13 条 文件 705 目录 4 突变体 32 窗口站 2 信号量 789 钥匙 208 过程 1 线程 5766 桌面 1 IO完成308 定时器 276 键控事件 1 TpWorkerFactory 48
因此,实际上进程拥有 5766 个线程。那么,我的问题是,Windows 何时真正释放进程的句柄?是否有可能出现某种延迟或兑现?有人可以解释这种行为吗?我不认为我们有处理泄漏,但我们在系统的遗留部分有奇怪的行为,为小任务快速创建和关闭线程。另外我想指出,我们不太可能同时运行超过 1000 个线程,我对此非常确定。谢谢。