PDH性能计数器实例名称

时间:2016-03-25 09:57:54

标签: c++ winapi performancecounter

我试图通过PDH API获取性能信息。我遇到的问题是我无法将流程实例绑定到计数器实例:实例名称对于不同的流程实例总是相同的。

e.g。不同 svchost 进程的性能计数器具有实例名称​​ svchost#1 svchost#2 等。但是PDH函数总是只返回svchost而没有尾随数字

我使用 PDH_FMT_COUNTERVALUE_ITEM.szName 来获取实例名称。

我也尝试了 PdhEnumObjectItems()函数,但没有运气:所有返回的实例名称仍然相同。

1 个答案:

答案 0 :(得分:0)

不幸的是,我不认为PDH提供了任何方法来区分具有相同名称的两个进程。

如果这对您造成问题,您可以转到较低级别的注册表API。 (PDH是一个尝试简化性能计数器使用的包装器,但V1性能计数器的真正API是RegQueryValueEx,这就是PDH实际使用的内容,用于读取V1性能计数器值。过程性能计数器是一个V1计数器。)低级注册表API提供PERF_INSTANCE_DEFINITION结构中的信息,其中包含可能有用的UniqueID字段。 (虽然Process性能计数器可能实际上没有将UniqueID设置为任何有用的东西 - 一些性能计数器将其设置为一个好的值,而其他的只是将其设置为0.)

将来,我希望Process性能计数器将PID包含在实例名称中,并且它将使用PID作为实例UniqueID,这将解决问题。