为什么“.NET CLR内存”类别中的“进程ID”计数器始终为零?

时间:2015-04-30 11:03:48

标签: .net process clr performancecounter perfmon

在“ .NET CLR内存”效果计数器类别下,有一个名为“进程ID ”的计数器。此计数器的任何给定实例都应返​​回与该实例关联的Windows进程的进程ID。对于我自己的进程,此计数器始终为零值。那是为什么?

如果我查看计数器的devenv实例,它会返回预期值 - 至少,该值与任务管理器报告的进程ID匹配。

如果我在调试模式下运行我自己的应用程序并检查计数器的PerfCounterTest.vshost实例,它只有零值。

如果我在没有调试器的情况下运行自己的应用程序,PerfCounterTest实例始终为零。

如果我运行自己的应用程序的多个实例,序列编号的实例PerfCounterTest#1PerfCounterTest#2 ...都具有零值。

为什么这个计数器总是为零,并且看到它始终为零,我如何找到与我的进程关联的实例名称,同时记住它可能没有唯一的名称?

1 个答案:

答案 0 :(得分:0)

实际上,此计数器的实例将具有零值,直到与该实例关联的进程中发生第一次垃圾收集。

此事实记录在与“进程ID ”计数器关联的计数器帮助文本中:

  

此计数器显示正在监视的CLR流程实例的进程ID。在第一次垃圾收集之后,显示的值将为0。

隐匿性源于这样一个事实,即虽然您可以使用span { display: inline-block; } 命名空间中的内容轻松阅读此文本,但此处没有其他文档。我在MSDN,TechNet和网络上搜索过,一无所获。即使在发现答案后,我打开了 PerfMon 并试图在U.I中找到这个字符串。 - 据我所知,它不会在任何地方显示。

供将来参考,以下是您询问计数器帮助文本的方式:

System.Diagnostics