2010-02-02 13 views
24
PerformanceCounter cpuload = new PerformanceCounter(); 
cpuload.CategoryName = "Processor"; 
cpuload.CounterName = "% Processor Time"; 
cpuload.InstanceName = "_Total"; 
Console.WriteLine(cpuload.NextValue() + "%"); 

आउटपुट हमेशा 0% है, जबकि cpuload.RawValue 736861484375 की तरह है या तो, NextValue() पर क्या हुआ?सीपीयू प्रदर्शन काउंटर 0% सीपीयू उपयोग की रिपोर्टिंग क्यों रखता है?

उत्तर

30

वह काउंटर का पहला पुनरावृत्ति हमेशा 0 होगा, क्योंकि इसमें अंतिम मूल्य की तुलना करने के लिए कुछ भी नहीं है। इसे आज़माएं:

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() + "%"); 

फिर आपको कुछ डेटा आना चाहिए। यह निरंतर ग्राफ या अद्यतन परिदृश्य में देखा जा सकता है ... यही कारण है कि आप अक्सर इस समस्या में नहीं आते हैं।

यहाँ MSDN reference है:

विधि nextValue() हमेशा रिटर्न पहली कॉल पर एक 0 मूल्य। तो आप को इस विधि को दूसरे समय पर कॉल करना होगा।

13

पहले पहले मान प्राप्त (0 किया जाएगा)

NextValue(); 

तब के लिए 1000 मिलीसे

Thread.Sleep(1000); 

तो दूसरा मान जो सच CPU उपयोग है पुनः प्राप्त प्रतीक्षा करें।

NextValue(); 

कोड इस तरह दिखना चाहिए:

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); 
संबंधित मुद्दे