WMI query - CPU LoadPercentage

LaPhi picture LaPhi · Mar 7, 2012 · Viewed 13.5k times · Source

I´m searching for a better way to get the CPU load in percent with WMI from multiple systems(means different CPUs etc.). My code is working, but I think there is a better way to get over all CPU usage in percent.

Any ideas?

Thank you in advance!

SelectQuery queryCpuUsage = new SelectQuery("SELECT * FROM Win32_Processor");
ManagementObjectSearcher cpuUsage = new ManagementObjectSearcher(scope, queryCpuUsage);                                       
ManagementObjectCollection cpuUsageCollection = cpuUsage.Get();                                                       

foreach (ManagementObject queryObj in cpuUsageCollection)
{                                           
iCPU++;
calcCPU = Convert.ToInt32(queryObj["LoadPercentage"]);
perCPU = perCPU + calcCPU;
}

perCPU = perCPU / iCPU;

cpuUsageCollection.Dispose();

Console.WriteLine("LoadPercentage CPU: {0}", perCPU);

Answer

raz3r picture raz3r · Mar 22, 2012

Personally I'd go for the Win32_PerfRawData_PerfOS_Processor class because it is much more precise. You will need to query both PercentProcessorTime and TimeStamp_Sys100NS. Here you can find the exact formula.