PDH 性能计数器实例名称
Posted
技术标签:
【中文标题】PDH 性能计数器实例名称【英文标题】:PDH performance counter instance names 【发布时间】:2016-03-25 09:57:54 【问题描述】:我正在尝试使用 PDH API 获取性能信息。我遇到的问题是我无法将流程实例绑定到计数器实例:不同流程实例的实例名称始终相同。
例如不同 svchost 进程的性能计数器具有实例名称 svchost#1、svchost#2 等。但是 PDH 函数总是只返回没有尾随数字的 svchost .
我使用 PDH_FMT_COUNTERVALUE_ITEM.szName 来获取实例名称。
我还尝试了 PdhEnumObjectItems() 函数,但没有成功:所有返回的实例名称仍然相同。
【问题讨论】:
【参考方案1】:不幸的是,我认为 PDH 没有提供任何方法来区分同名的两个进程。
如果这给您带来了问题,您可以转到较低级别的注册表 API。 (PDH 是一个试图简化性能计数器使用的包装器,但 V1 性能计数器的真正 API 是 RegQueryValueEx,而这正是 PDH 在幕后实际使用来读取 V1 性能计数器值的。进程性能计数器是 V1 计数器.) 低级注册表 API 在 PERF_INSTANCE_DEFINITION 结构中提供信息,其中包括可能有帮助的 UniqueID 字段。 (尽管进程性能计数器可能实际上并没有将 UniqueID 设置为任何有用的值 - 一些性能计数器将其设置为一个合适的值,而其他性能计数器只是将其设置为 0。)
将来,我希望进程性能计数器将在实例名称中包含 PID,并将 PID 用作实例 UniqueID,这将解决问题。
【讨论】:
以上是关于PDH 性能计数器实例名称的主要内容,如果未能解决你的问题,请参考以下文章