以与语言无关的方式检索性能计数器值

9 c# c++ windows performancecounter

在Windows下,性能计数器具有不同的名称,具体取决于操作系统语言.例如,在英文版Windows上,有性能计数器\Processor(_Total)\% Processor Time.\Prozessor(_Total)\Prozessorzeit (%)在德语Windows版本上调用相同的计数器.

有没有办法以与语言无关的方式检索性能计数器值(使用C++或C#)?或者有没有替代方案来获得整个计算机的处理器负载而没有性能计数器?

Jus*_*tin 8

每个PerfMon计数器都有一个唯一的(每台机器)整数ID来标识PerfMon计数器(但是在标准计数器的情况下,这个id保证保持不变).

将PerfMon计数器ID与其美国英语名称及其本地化名称相关联的信息存储在注册表中的以下键中:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib
Run Code Online (Sandbox Code Playgroud)

一旦您使用注册表获取PerfMon计数器名称(您可以将其作为标准计数器的常量嵌入到您的应用程序中),您可以使用PdhLookupPerfNameByIndex函数来查找给定计数器ID的本地化名称.

有关更多详细信息,请参阅以本地化语言(Microsoft KB)正确使用PDH API.

您可能还会发现通过winreg(StackOverflow)查找perfmon计数器ID有点相关.

  • 我比较了ID,其中一些ID在其他计算机上是不同的。但有一个解决方法:我使用英文名称在“009”键中查找 ID,然后使用 PdhLookupPerfNameByIndex 函数查找本地化名称。源代码:http://wojciechkulik.pl/csharp/get-a-performancecounter-using-english-name (2认同)