PDH 性能计数器实例名称

Posted

技术标签:

【中文标题】PDH 性能计数器实例名称【英文标题】:PDH performance counter instance names 【发布时间】:2016-03-25 09:57:54 【问题描述】:

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

例如不同 svchost 进程的性能计数器具有实例名称 svchost#1svchost#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 性能计数器实例名称的主要内容,如果未能解决你的问题,请参考以下文章

性能计数器实例名称与进程名称

服务模型性能计数器实例名称

系统性能计数器的实例名称是不是已本地化?

OMS 逻辑磁盘性能计数器不存在磁盘实例名称

即使进程没有退出,进程的性能计数器实例名称是不是可以更改

使用性能计数器获得正常运行时间的权限问题