使用C#在WMI中返回CPU使用率

要使用WMI返回CPU使用率,是否从Win32_PerfFormattedData_PerfOS_Processor返回PercentProcessorTime? 如果没有,我应该看哪一堂课? 谢谢。

ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_PerfFormattedData_PerfOS_Processor"); foreach (ManagementObject obj in searcher.Get()) { var usage = obj["PercentProcessorTime"]; var name = obj["Name"]; Console.WriteLine(name +" : " + usage); } 

而对于Linq爱好者来说

 ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_PerfFormattedData_PerfOS_Processor"); var cpuTimes = searcher.Get() .Cast() .Select(mo => new { Name = mo["Name"], Usage = mo["PercentProcessorTime"] } ) .ToArray(); 

看起来这里的信息也可以在WMI中找到:

"select LoadPercentage from Win32_Processor"

“每个处理器的负载容量,平均为最后一秒。处理器负载是指每个处理器一次的总计算负担。”

要么:

"select LoadPercentage from CIM_Processor"

“处理器的加载,在最后一分钟的平均值,以百分比表示。”

要么:

"select PercentProcessorTime from Win32_PerfFormattedData_PerfOS_Processor"似乎也有效。


注意:这些通常会为每个CPU核心返回多个结果,并且必须求和以获得整个系统的总CPU使用率,因此请查看。

这个问题和答案实际上更多地与WMI有关,因为从WMI获取信息与C#实际上是一个不同的问题,对于C#中的任何WMI查询应该非常相似。