Search code examples
c#windowsperformancecpu-usageperformancecounter

CPU Usage in Task Manager using Performance Counters


[My Attempts]

Already went through

  1. How to get the CPU Usage in C#? But "_Total" Instance of Processor would give me total consumption of CPU as opposed to specifc application or 'process'

  2. In a C# Program, I am trying to get the CPU usage percentage of the application but it always shows 100

  3. What exactly is CPU Time in task manager? , explains it but does not say how to retrive this value.

After referring http://social.technet.microsoft.com/wiki/contents/articles/12984.understanding-processor-processor-time-and-process-processor-time.aspx

I got that

TotalProcessorTimeCounter = new PerformanceCounter("Process", "% Processor Time", processName);

has a baseline of (No.of Logical CPU*100) Basically, this does not give me a scale of 100% over CPU consumed.

Tried digging around task manager and found that Task manger->Processor-> CPU Usage is on a scale of 100.

Processor\% Processor Time object does not take process name as input. it only has '_Total' as an input.

[Question]

How do I get this data(CPU consumption) using performance counters over a scale of 100 for a particular process for a multi-core system?


Solution

  • This gives me the exact figure you get on Task Manager (in the Details tab), is this what you want?

    // Declare the counter somewhere
    var process_cpu = new PerformanceCounter(
                                       "Process", 
                                       "% Processor Time", 
                                       Process.GetCurrentProcess().ProcessName
                                            );
    // Read periodically
    var processUsage = process_cpu.NextValue() / Environment.ProcessorCount;