2016-03-25 46 views
0

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

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

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

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

回答

0

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

如果这对您造成问题,您可以转到较低级别的注册表API。 (PDH是一个试图简化性能计数器使用的包装器,但是V1性能计数器的真实API是RegQueryValueEx,这就是PDH实际使用的读取V1性能计数器值的过程性能计数器是一个V1计数器。)底层注册表API提供了PERF_INSTANCE_DEFINITION结构中的信息,其中包含可能有所帮助的UniqueID字段。 (尽管进程性能计数器实际上并没有将UniqueID设置为任何有用的东西 - 某些性能计数器将其设置为很好的值,而其他性能计数器将其设置为0)。

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