为什么System.Diagnostics.GetCurrentProcess().Threads.Count
,任务管理器和Visual Studio调试器都会报告不同数量的线程?
我发现了这个: Why does the number of threads reported by WinDbg, Task Manager and VS Debugger differ?
它表明调试器执行某种形式的过滤,但从来没有回答过滤器是什么。还有一个关于获取线程计数的入侵与非侵入性方法以及如何影响任务管理器报告的数量的说明。
我所看到的是System.Diagnostics.GetCurrentProcess().Threads.Count
报告的线程数量大于任务管理器,后者报告的线程数量大于调试器。
System.Diagnostics.GetCurrentProcess().Threads.Count
最终是最准确的还是在它报告的内容中有错误或误导?了解Visual Studio调试器正在应用哪些过滤器(以及看似任务管理器,尽管是不同的过滤器)也很好。
答案 0 :(得分:1)
可能导致这些计数差异的一件事是计数器的采样率。
根据实际执行情况,线程数可能会相当快速地改变,因此如果两个线程计数器没有以相同的速率采样,它们可能会显示不同的数字。
我不知道Visual Studio中有任何过滤但是这个答案:https://stackoverflow.com/a/2295054/563088有一个有趣的发现:死线程。请注意,在调试过程中,Visual Studio会暂停该过程,因此线程(特别是在操作系统级别)可能会消失,但仍然存在于托管级别,反之亦然。