Why the cpu performance counter kept reporting 0% cpu usage?

前端 未结 2 1888
闹比i
闹比i 2020-11-27 05:55
PerformanceCounter cpuload = new PerformanceCounter();
cpuload.CategoryName = \"Processor\";
cpuload.CounterName = \"% Processor Time\";
cpuload.InstanceName = \"_To         


        
相关标签:
2条回答
  • 2020-11-27 06:23

    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);
    
    0 讨论(0)
  • 2020-11-27 06:38

    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.

    0 讨论(0)
提交回复
热议问题