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

14

如何使用WMI返回CPU使用率?是从Win32_PerfFormattedData_PerfOS_Processor中返回PercentProcessorTime吗?

如果不是,我应该查看哪个类呢?谢谢。


试着看看这个问题的解答(https://dev59.com/VnVC5IYBdhLWcg3wfhKL)。它应该能回答你的问题。 - Icemanind
是的,Win32_PerfFormattedData_PerfOS_Processor WMI类是获取CPU使用率的正确选择。 - RRUZ
3个回答

23
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<ManagementObject>()
    .Select(mo => new
        {
            Name = mo["Name"],
            Usage = mo["PercentProcessorTime"]
        }
    )
    .ToArray();

谢谢,那就是我设置我的东西的方式。 - jpavlov
2
可以使用以下代码获取CPU使用率:new ManagementObjectSearcher("SELECT PercentProcessorTime FROM Win32_PerfFormattedData_PerfOS_Processor WHERE Name='_Total'").Get().Cast<ManagementObject>().First().Properties["PercentProcessorTime"].Value.ToString(); .Properties["PercentProcessorTime"].Value.ToString() - Sevin7

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查询都应该非常相似。


0

我认为以下代码将会占用全部 CPU 资源

ObjectQuery objQuery = new ObjectQuery("SELECT * FROM Win32_PerfFormattedData_PerfOS_Processor WHERE Name=\"_Total\"");
    ManagementObjectSearcher mngObjSearch = new ManagementObjectSearcher(CommonSettings.MngScope, objQuery);
    ManagementObjectCollection mngObjColl = mngObjSearch.Get();
    
    if (mngObjColl.Count > 0)
    {
        foreach (ManagementObject mngObject in mngObjColl)
        {
            try
            {
                 uint cpu_usage = 100 - Convert.ToUInt32(mngObject["PercentIdleTime"]);
                 break;
            }
            catch (Exception ex)
            {
                 break;
            }
        }
     }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接