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

jpa*_*lov 7 c# wmi

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

L.B*_*L.B 16

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);
}
Run Code Online (Sandbox Code Playgroud)

而对于Linq爱好者来说

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

  • 还可以这样做: new ManagementObjectSearcher("SELECT PercentProcessorTime FROM Win32_PerfFormattedData_PerfOS_Processor WHERE Name='_Total'").Get().Cast&lt;ManagementObject&gt;().First().Properties["PercentProcessorTime"].Value.ToString(); .Properties["PercentProcessorTime"] .Value.ToString() (2认同)

jgs*_*tew 6

看来该信息也可以在 WMI 中找到:

select LoadPercentage from Win32_Processor

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

或者:

select LoadPercentage from CIM_Processor

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

或者:

select PercentProcessorTime from Win32_PerfFormattedData_PerfOS_Processor似乎也有效。


注意:这些通常会为每个 CPU 核心返回多个结果,并且必须进行求和/平均才能获得整个系统的总 CPU 使用率,因此请查找该结果。

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