【问题标题】:Returning CPU usage in WMI using C#使用 C# 返回 WMI 中的 CPU 使用率
【发布时间】:2012-03-19 20:44:41
【问题描述】:

要使用WMI 返回CPU 使用率,是否返回PercentProcessorTime from Win32_PerfFormattedData_PerfOS_Processor

如果没有,我应该看哪门课?谢谢。

【问题讨论】:

标签: c# wmi


【解决方案1】:
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();

【讨论】:

  • 谢谢,我就是这么设置的。
  • 也可以这样做:new ManagementObjectSearcher("SELECT PercentProcessorTime FROM Win32_PerfFormattedData_PerfOS_Processor WHERE Name='_Total'").Get().Cast().First().Properties["PercentProcessorTime"] .Value.ToString(); .Properties["PercentProcessorTime"] .Value.ToString()
【解决方案2】:

该信息似乎也可在此处的 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 查询都应该非常相似。

【讨论】:

    【解决方案3】:

    我认为下面会给出完整的 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;
                }
            }
         }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      相关资源
      最近更新 更多