To return the CPU usage by using WMI, do I return the PercentProcessorTime from Win32_PerfFormattedData_PerfOS_Processor
?
If not, which class should I l
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 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#.
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();
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;
}
}
}