2011-01-13 16 views
51

मैं सीपीयू और .NET PerformanceCounter कक्षा का उपयोग कर किसी विशेष प्रक्रिया के मेमोरी उपयोग कैसे प्राप्त कर सकता हूं? औरएक प्रक्रिया के सीपीयू और मेमोरी उपयोग प्राप्त करने के लिए सही प्रदर्शन काउंटर क्या है?

Processor\% Processor Time और Process\% Processor Time के बीच अंतर क्या है?

मैं इन दोनों के बीच थोड़ा उलझन में हूं।

पूरे पीसी सीपीयू और मेमोरी उपयोग प्राप्त करने के लिए:

using System.Diagnostics; 

फिर विश्व स्तर पर घोषित: फिर

private PerformanceCounter theCPUCounter = 
    new PerformanceCounter("Processor", "% Processor Time", "_Total"); 

CPU समय प्राप्त करने के लिए, बस

+3

स्मृति के उपयोग को मापने के लिए कोई भी सही तरीका नहीं है। मेमोरी कई अलग-अलग तरीकों से इस्तेमाल किया जा सकता है। उदाहरण के लिए क्या आप डिस्क या मेमोरी में स्पीड मेमोरी गिनती करते हैं जो अभी आरक्षित/प्रतिबद्ध है लेकिन अभी तक लिखी नहीं है, ... – CodesInChaos

उत्तर

91
this पद से

NextValue() विधि पर कॉल करें:

this.theCPUCounter.NextValue(); 

यह आपको CPU उपयोग

स्मृति के उपयोग के रूप में मिल जाएगा, एक ही बात लागू होती है मेरा मानना ​​है कि:

:

private PerformanceCounter theMemCounter = 
    new PerformanceCounter("Memory", "Available MBytes"); 

फिर स्मृति के उपयोग NextValue() विधि प्राप्त करने के लिए, बस फोन

this.theMemCounter.NextValue(); 

एक विशिष्ट प्रक्रिया के लिए सीपीयू और मेमोरी उपयोग:

private PerformanceCounter theCPUCounter = 
    new PerformanceCounter("Process", "% Processor Time",    
    Process.GetCurrentProcess().ProcessName); 

जहां Process.GetCurrentProcess().ProcessName वह प्रक्रिया नाम है जिसके बारे में आप जानकारी प्राप्त करना चाहते हैं।

private PerformanceCounter theMemCounter = 
    new PerformanceCounter("Process", "Working Set", 
    Process.GetCurrentProcess().ProcessName); 

जहां Process.GetCurrentProcess().ProcessName प्रक्रिया नाम आप के बारे में जानकारी प्राप्त करना चाहते हैं।

ध्यान दें कि कार्य सेट प्रक्रिया 'स्मृति पदचिह्न निर्धारित करने के लिए अपने आप में पर्याप्त नहीं हो सकता है - What is private bytes, virtual bytes, working set?

सभी श्रेणियाँ प्राप्त करने के लिए देखते हैं, देखते हैं Walkthrough: Retrieving Categories and Counters

Processor\% Processor Time के बीच का अंतर और Process\% Processor TimeProcessor पीसी से ही है और Process प्रति व्यक्तिगत प्रक्रिया है। तो प्रोसेसर का प्रोसेसर समय पीसी पर उपयोग किया जाएगा। एक प्रक्रिया के प्रोसेसर समय निर्दिष्ट प्रक्रियाओं का उपयोग होगा। श्रेणी नाम के पूर्ण विवरण के लिए: Performance Monitor Counters

अपने प्रोसेसर के उपयोग की गणना करने के रूप में इस article का वर्णन प्रदर्शन काउंटर

उपयोग System.Diagnostics.Process.TotalProcessorTime और System.Diagnostics.ProcessThread.TotalProcessorTime गुण का उपयोग कर के लिए एक वैकल्पिक।

+1

लेकिन क्या यह वर्तमान प्रक्रिया के सीपीयू/मेम उपयोग को देगा जिससे कार्य कहलाता है? –

+0

मेमोरी उपयोग मेमोरी उपलब्ध नहीं है। मैं मेगाबाइट्स का उपयोग कैसे करूं, उपलब्ध नहीं? –

+1

यदि मैं उपरोक्त के रूप मेंCPUCounter बनाता हूं तो मुझे एक अवैध अपवाद प्राप्त होता है: "काउंटर नाम डेटा लोड नहीं कर सकता क्योंकि रजिस्ट्री से एक अवैध अनुक्रमणिका" पढ़ी गई थी। " – Ted

3

पेलो हाइपर-वी:

private PerformanceCounter theMemCounter = new PerformanceCounter(
    "Hyper-v Dynamic Memory VM", 
    "Physical Memory", 
    Process.GetCurrentProcess().ProcessName);