How to get CPU usage for more than 2 cores?

spychu picture spychu · Apr 4, 2011 · Viewed 10.9k times · Source

I try to get in my program CPU usage divided by a cores. Now I use the PerformanceCounter and changing the InstanceName between 0 and 1 I have the data from 2 cores.

PerformanceCounter pc0 = new PerformanceCounter("Processor", "% Processor Time", "0");
PerformanceCounter pc1 = new PerformanceCounter("Processor", "% Processor Time", "1");

How I can get core usage for 3rd, 4th core etc.?

Does anyone can help me?

Thanks

Answer

RB. picture RB. · Apr 4, 2011

I suspect that what you are really asking is "How do I count the number of cores?". This code will count the number of cores, and then create performance counters based on that.

int coreCount = 0;
foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_Processor").Get())
{
    coreCount += int.Parse(item["NumberOfCores"].ToString());
}

PerformanceCounter[] pc = new PerformanceCounter[coreCount];

for (int i = 0; i < coreCount; i++)
{
    pc[i] = new PerformanceCounter("Processor", "% Processor Time", i.ToString());
    Console.WriteLine(pc[i].CounterName);
}