So arbeiten Sie mit Leistungsindikatoren in C #

Windows überwacht die Prozesse und Dienste, die in Ihrem System ausgeführt werden, indem es die derzeit ausgeführten Threads, den CLR-Speicher usw. verfolgt. Oft müssen Sie die Leistung von Computersystemen oder der darauf ausgeführten Anwendungen entsprechend messen zu Metriken wie dem Ressourcenverbrauch im System, den auf dem System ausgeführten Diensten oder der Leistung der an das System angeschlossenen Geräte.

Leistungsindikatoren (eine standardmäßig bereitgestellte Funktion) ermöglichen es uns, die Leistungsdaten zu erfassen, zu veröffentlichen und zu analysieren, die sich auf eine oder mehrere Anwendungen oder Dienste beziehen, die im System oder im gesamten System ausgeführt werden.

Beim Erstellen von Anwendungen müssen Sie häufig die Leistung (Ressourcenverbrauch oder -nutzung über einen bestimmten Zeitraum) überwachen und anhand der Leistungsdaten die Engpässe in der Anwendung identifizieren. Hier bieten sich Leistungsindikatoren an. Sie können diese Details auch mit WMI (Windows Management Instrumentation), einer COM-basierten Microsoft-Technologie, abrufen. Mit Leistungsindikatoren können Sie jedoch zur Laufzeit die Echtzeitstatistik des Ressourcenverbrauchs in Ihrem System abrufen.

Mit dem Snap-In "Leistungsüberwachung" (ein Tool, das standardmäßig unter Windows bereitgestellt wird) können die Leistungsdaten in Echtzeit angezeigt werden. Um dieses Tool zu starten, klicken Sie auf das Startmenü und dann auf "Ausführen". Geben Sie als Nächstes "perfmon" ein und drücken Sie die Eingabetaste.

Benutzerdefinierte Leistungsindikatoren

Das Erstellen benutzerdefinierter Leistungsindikatoren ist einfach. Sie können Leistungsindikatoren mit dem Server-Explorer erstellen. Sie müssen zuerst die Leistungsindikatorkategorie erstellen und dann einen oder mehrere Leistungsindikatoren als Teil dieser Kategorie erstellen.

Um programmgesteuert mit Leistungsindikatoren zu arbeiten, können Sie die Klasse System.Diagnostics.PerformanceCounter verwenden. Sie müssten eine Instanz der PerformanceCounter-Klasse erstellen und dann die erforderlichen Werte für jede dieser Eigenschaften angeben: CategoryName, CounterName, MachineName und ReadOnly.

Um eine benutzerdefinierte Leistungsindikatorkategorie zu erstellen, müssen Sie die Create-Methode der PerformanceCounterCategory-Klasse nutzen. Das folgende Codefragment kann beispielsweise zum Erstellen einer benutzerdefinierten Leistungsindikatorkategorie verwendet werden.

PerformanceCounterCategory.Create("CustomPerformanceCounterCategoryName", "CustomPerformanceCounterHelp", PerformanceCounterCategoryType.MultiInstance,

"CustomPerformanceCounterName", "CustomPerformanceCounterHelp");

Das folgende Codefragment zeigt, wie Sie alle verfügbaren Leistungsindikatorkategorien anzeigen können.

static void Main()

    {

        var performanceCounterCategories = PerformanceCounterCategory.GetCategories();

        foreach(PerformanceCounterCategory performanceCounterCategory in performanceCounterCategories)

        {

         Console.WriteLine(performanceCounterCategory.CategoryName);

        }

        Console.Read();

    }

Das folgende Codefragment zeigt, wie Sie Leistungsindikatoren abrufen können, die zur Kategorie "Prozessor" gehören.

var performanceCounterCategories = PerformanceCounterCategory.GetCategories()

     .FirstOrDefault(category => category.CategoryName == "Processor");

var performanceCounters = performanceCounterCategories.GetCounters("_Total");

Sie müssen die PerformanceCounter-Klasse verwenden, um einen Leistungsindikator zu lesen, der zu einer bestimmten Kategorie gehört. Beachten Sie, dass die PerformanceCounter-Klasse im System.Diagnostics-Namespace verfügbar ist. Hier ist die vollständige Codeliste, die zeigt, wie Sie die Namen der Leistungsindikatoren aller Leistungsindikatoren anzeigen können, die zur Kategorie "Prozessor" gehören.

static void Main()

    {

        var performanceCounterCategories = PerformanceCounterCategory.GetCategories()

            .FirstOrDefault(category => category.CategoryName == "Processor");

        var performanceCounters = performanceCounterCategories.GetCounters("_Total");

        Console.WriteLine("Displaying performance counters for Processor category:--\n");

        foreach (PerformanceCounter performanceCounter in performanceCounters)

        {

            Console.WriteLine(performanceCounter.CounterName);

        }

        Console.Read();

    }

Sie können auch Ihren benutzerdefinierten Leistungsindikator erstellen und Daten in diese schreiben. Dazu sollten Sie die Klassen CounterCreationDataCollection und CounterCreationData nutzen.

String customCategory = "Custom Performance Counter Category";

if (!PerformanceCounterCategory.Exists(customCategory))

{

CounterCreationDataCollection counterCreationDataCollection = new CounterCreationDataCollection();

counterCreationDataCollection.Add(new CounterCreationData("Counter 1", "Sample Counter 1", PerformanceCounterType.ElapsedTime));

counterCreationDataCollection.Add(new CounterCreationData("Counter 2", "Sample Counter 2", PerformanceCounterType.SampleCounter));

counterCreationDataCollection.Add(new CounterCreationData("Counter 3", "Sample Counter 3", PerformanceCounterType.SampleCounter));

PerformanceCounterCategory.Create(customCategory, "This is just an example", PerformanceCounterCategoryType.SingleInstance, counterCreationDataCollection);

}

Beachten Sie, dass überprüft wird, ob der zu erstellende benutzerdefinierte Leistungsindikator bereits vorhanden ist. Der benutzerdefinierte Leistungsindikator wird nur erstellt, wenn er nicht vorhanden ist. Als Nächstes wird eine Instanz von CounterCreaionDataCollection erstellt. Mit der CounterCreationData-Klasse werden der Auflistung neue Zähler hinzugefügt. Sobald die erforderlichen Leistungsindikatoren hinzugefügt wurden, wird die Create-Methode der PerformanceCounterCategory-Klasse aufgerufen, um die benutzerdefinierte Leistungskategorie zu erstellen.

Beachten Sie, dass Ihre Anwendung über die erforderlichen Berechtigungen für den Zugriff auf die von Ihnen benötigten Leistungsindikatoren verfügen sollte. Ich würde immer empfehlen, Visual Studio IDE im Administratormodus zu starten. Leistungsindikatoren helfen sehr bei der Analyse der Leistung Ihrer Anwendungen. Sie können die Leistungsdaten zu dem Zeitpunkt analysieren, zu dem Ihre Anwendung ausgeführt wird.