Returning CPU usage in WMI using C#
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
- https://msdn.microsoft.com/en-us/library/aa394373%28v=vs.85%29.aspx
"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
- https://msdn.microsoft.com/en-us/library/aa387978(v=vs.85).aspx
"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#.