2013-04-24 8 views
8

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

उदाहरण के लिए, Explorer के लिए सीपीयू और मेमोरी डेटा प्राप्त करने, मैं प्रदर्शन काउंटरों इस प्रकार बना:

PerformanceCounter PC = new PerformanceCounter(); 
PC.CategoryName = "Process"; 
PC.CounterName = "% Processor Time"; 
PC.InstanceName = "Explorer"; 

PerformanceCounter PC = new PerformanceCounter(); 
PC.CategoryName = "Process"; 
PC.CounterName = "Working Set - Private"; 
PC.InstanceName = "Explorer"; 

दुर्भाग्य से, वहाँ है कि मुझे उस के लिए नेटवर्क उपयोग पाने के लिए अनुमति देता है प्रक्रिया categoryName के लिए कोई संपत्ति है प्रक्रिया। मैं किसी भी विशेष एनआईसी पर समग्र नेटवर्क उपयोग प्राप्त करने के लिए नेटवर्क इंटरफेस categoryName का उपयोग कर सकता हूं, लेकिन इसे किसी भी प्रक्रिया में अलग नहीं कर सकता।

+0

ऐसा लगता है कि पहले कुछ ऐसा ही पूछा गया है: http: //stackoverflow.com/questions/438240/monitor-a-processs-network-usage – Dilshod

+2

यह एक वास्तुशिल्प सीमा है। ये काउंटर नेटवर्क ड्राइवर स्टैक द्वारा कार्यान्वित किए जाते हैं। जो कर्नेल मोड में चलता है, इसमें यूजरोड प्रक्रिया जागरूकता नहीं होती है। उसी तरह का कारण है कि FileSystemWatcher आपको यह नहीं बता सकता कि किस प्रक्रिया ने फ़ाइल को संशोधित किया है। –

उत्तर

0

मुझे लगता है कि आप केवल पूरे सिस्टम के लिए नेटवर्क उपयोग प्राप्त कर सकते हैं। आप इस कोड का उपयोग कर सकते हैं:

GetCounterValue(_netRecvCounters[index], "Network Interface", "Bytes Received/sec",  _instanceNames[index]): 

double GetCounterValue(PerformanceCounter pc, string categoryName, string counterName, string instanceName) 
{ 
    pc.CategoryName = categoryName; 
    pc.CounterName = counterName; 
    pc.InstanceName = instanceName; 
    return pc.NextValue(); 
} 
PerformanceCounters साथ

, आप केवल मूल्यों कि माइक्रोसॉफ्ट चाहते हैं कि आप का उपयोग करने की मिल सकती है।

संबंधित मुद्दे