PDH性能计数器实例名称

PDH performance counter instance names

本文关键字:实例 性能计数器 PDH      更新时间:2023-10-16

我正在尝试使用PDH API获取性能信息。我遇到的问题是,我无法将流程实例绑定到计数器实例:不同流程实例的实例名称总是相同的。

例如,不同svchost进程的性能计数器具有实例名vchost#1svchost#2等。但是,PDH函数总是只返回svchost,而不返回尾随数字。

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

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

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

如果这给您带来了问题,您可以转到较低级别的注册表API。(PDH是一个包装器,试图简化性能计数器的使用,但V1性能计数器的真正API是RegQueryValueEx,这正是PDH实际用来读取V1性能计数器值的东西。进程性能计数器是V1计数器。)低层注册表API在PERF_INSSTANCE_DEFINITION结构中提供信息,其中包括一个可能会有所帮助的UniqueID字段。(尽管Process性能计数器可能实际上并没有将UniqueID设置为任何有用的值——有些性能计数器将其设置为一个好值,而另一些则只是将其设置成0。)

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