2010-07-20 19 views
13

मेरे पास एक कस्टम काउंटर श्रेणी है, जिसके लिए मुझे किसी भी मौजूदा काउंटर को हटाने या रीसेट किए बिना एक नया काउंटर जोड़ने की आवश्यकता है। मैं यह कैसे कर सकता हूँ?पुराने काउंटर को हटाए बिना मौजूदा प्रदर्शन काउंटर श्रेणी में नया काउंटर कैसे जोड़ें?

मैंने काउंटरएक्सिस्ट्स() का उपयोग करने की कोशिश की, लेकिन काउंटर बनाने के बाद भी, मैं इसे काउंटर क्रिएशनडेटा चयन आइटम से कैसे जोड़ सकता हूं और इसे अपने मौजूदा काउंटर श्रेणी से जोड़ सकता हूं?

उत्तर

13

ऐसा करने का सबसे अच्छा तरीका मैंने पाया, विशेष रूप से जब इस विषय पर अधिक जानकारी नहीं लगती है, तो मौजूदा कच्चे मूल्यों को संरक्षित करना है और फिर श्रेणी को हटाए जाने और फिर से बनाए जाने के बाद उन्हें फिर से लागू करना है ।

/// <summary> 
/// When deleting the Category, need to preserve the existing counter values 
/// </summary> 
static Dictionary<string, long> GetPreservedValues(string category, XmlNodeList nodes) 
{ 
    Dictionary<string, long> preservedValues = new Dictionary<string, long>(); 

    foreach (XmlNode counterNode in nodes) 
    { 
     string counterName = counterNode.Attributes["name"].Value; 

     if (PerformanceCounterCategory.CounterExists(counterName, category)) 
     { 
      PerformanceCounter performanceCounter = new PerformanceCounter(category, counterName, false); 
      preservedValues.Add(counterName, performanceCounter.RawValue); 

      Console.WriteLine("Preserving {0} with a RawValue of {1}", counterName, performanceCounter.RawValue); 
     } 
     else 
     { 
      Console.WriteLine("Unable to preserve {0} because it doesn't exist", counterName); 
     } 
    } 

    return preservedValues; 
} 

/// <summary> 
/// Restore preserved values after the category has been re-created 
/// </summary> 
static void SetPreservedValues(string category, Dictionary<string, long> preservedValues) 
{ 
    foreach (KeyValuePair<string, long> preservedValue in preservedValues) 
    { 
     PerformanceCounter performanceCounter = new PerformanceCounter(category, preservedValue.Key, false); 
     performanceCounter.RawValue = preservedValue.Value; 

     Console.WriteLine("Restoring {0} with a RawValue of {1}", preservedValue.Key, performanceCounter.RawValue); 
    } 
} 
संबंधित मुद्दे