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

时间:2012-03-19 20:44:42

标签: c# wmi

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

3 个答案:

答案 0 :(得分:14)

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();

答案 1 :(得分:3)

似乎WMI中的信息也可在此处获取:

"select LoadPercentage from Win32_Processor"

&#34;每个处理器的负载容量,平均为最后一秒。处理器加载是指一次每个处理器的总计算负担。&#34;

"select LoadPercentage from CIM_Processor"

&#34;处理器的加载,在最后一分钟的平均值,以百分比表示。&#34;

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

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

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

答案 2 :(得分: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;
            }
        }
     }