PerformanceCounter cpuload = new PerformanceCounter();
cpuload.CategoryName = \"Processor\";
cpuload.CounterName = \"% Processor Time\";
cpuload.InstanceName = \"_To
First retrieve first value (would be 0)
NextValue();
Then wait for 1000 milisec
Thread.Sleep(1000);
Then retrieve second value which is the true cpu usage.
NextValue();
The code should look like this:
float perfCounterValue = perfCounter.NextValue();
//Thread has to sleep for at least 1 sec for accurate value.
System.Threading.Thread.Sleep(1000);
perfCounterValue = perfCounter.NextValue();
Console.WriteLine("Value: {0}", perfCounterValue);
The first iteration of he counter will always be 0, because it has nothing to compare to the last value. Try this:
var cpuload = new PerformanceCounter("Processor", "% Processor Time", "_Total");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Then you should see some data coming out. It's made to be seen in a constant graph or updated scenario...that's why you don't come across this problem often.
Here's the MSDN reference:
The method nextValue() always returns a 0 value on the first call. So you have to call this method a second time.