To return the CPU usage by using WMI, do I return the PercentProcessorTime from Win32_PerfFormattedData_PerfOS_Processor?
If not, which class should I look towards? Thanks.
To return the CPU usage by using WMI, do I return the PercentProcessorTime from Win32_PerfFormattedData_PerfOS_Processor?
If not, which class should I look towards? Thanks.
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);
}
And for Linq lovers
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();
 
    
    It seems like the info is also available in WMI here:
select LoadPercentage from Win32_Processor
"Load capacity of each processor, averaged to the last second. Processor loading refers to the total computing burden for each processor at one time."
OR:
select LoadPercentage from CIM_Processor
"Loading of the processor, averaged over the last minute, in a percentage."
OR:
select PercentProcessorTime from Win32_PerfFormattedData_PerfOS_Processor also seems to work.
Note: these often return multiple results per CPU core and have to be summed/averaged to get the total CPU usage for the system as a whole, so look for that.
This question and answer really has more to do with WMI since getting info from WMI with C# is really a different question and should be very similar for any WMI query in C#.
 
    
    I think below will give full CPU usage
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;
            }
        }
     }
