2010-07-20 1 views
13

Ich habe eine benutzerdefinierte Zählerkategorie, zu der ich einen neuen Zähler hinzufügen muss, ohne vorhandene Zähler zu löschen oder zurückzusetzen. Wie kann ich das machen?Wie fügen Sie einen neuen Leistungsindikator zu einer vorhandenen Leistungsindikatorkategorie hinzu, ohne die alten Leistungsindikatoren zu löschen?

Ich habe versucht, CounterExists() zu verwenden, aber wie kann ich es nach dem Erstellen des Leistungsindikators einem CounterCreationDataCollection-Element zuordnen und es meiner vorhandenen Leistungsindikatorkategorie zuordnen?

Antwort

13

Der beste Weg, dies zu tun, fand ich, besonders da es nicht viele Informationen zu diesem Thema zu geben scheint, die vorhandenen Rohwerte beizubehalten und sie dann erneut anzuwenden, nachdem die Kategorie gelöscht und neu erstellt wurde .

/// <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); 
    } 
} 
Verwandte Themen