Freigeben über


PerformanceCounterCategory-Klasse

Stellt ein Leistungsobjekt dar, das eine Kategorie von Leistungsindikatoren definiert.

Namespace: System.Diagnostics
Assembly: System (in system.dll)

Syntax

'Declaration
Public NotInheritable Class PerformanceCounterCategory
'Usage
Dim instance As PerformanceCounterCategory
public sealed class PerformanceCounterCategory
public ref class PerformanceCounterCategory sealed
public final class PerformanceCounterCategory
public final class PerformanceCounterCategory

Hinweise

Hinweis

Das auf diese Klasse angewendete HostProtectionAttribute-Attribut besitzt den Resources-Eigenschaftenwert Synchronization | SharedState. Das HostProtectionAttribute hat keine Auswirkungen auf Desktopanwendungen (die normalerweise durch Doppelklicken auf ein Symbol, Eingeben eines Befehls oder eines URL in einem Browser gestartet werden). Weitere Informationen finden Sie unter der HostProtectionAttribute-Klasse oder unter SQL Server-Programmierung und Hostschutzattribute.

Wichtig

Das Erstellen oder Löschen eines Leistungsindikators erfordert die Synchronisierung des zugrunde liegenden Codes mittels eines benannten Mutex. Wenn eine Anwendung mit sehr weitreichenden Berechtigungen den benannten Mutex sperrt oder versucht, zu erstellen bzw. zu löschen, bewirkt ein Leistungsindikator, dass die Anwendung nicht mehr reagiert, bis die Sperre wieder aufgehoben wird. Um dieses Problem zu vermeiden, sollten Sie nicht vertrauenswürdigem Code niemals eineUnmanagedCode-Berechtigung gewähren. Darüber hinaus ermöglicht die UnmanagedCode-Berechtigung das Umgehen anderer Berechtigungen und sollte daher nur sehr vertrauenswürdigem Code gewährt werden.

Die CategoryName-Eigenschaft der PerformanceCounterCategory-Instanz wird in der Anwendung Leistungsanzeige im Dialogfeld Indikator hinzufügen im Feld Leistungsobjekt angezeigt.

Die PerformanceCounterCategory-Klasse stellt verschiedene Methoden für die Interaktion mit Zählern und Kategorien des Computers bereit. Mit den Create-Methoden können Sie benutzerdefinierte Kategorien definieren. Mit der Delete-Methode können Kategorien des Computers entfernt werden. Mit der GetCategories-Methode können Sie die Liste der Kategorien anzeigen, wohingegen mit ReadCategory alle einer einzelnen Kategorie zugeordneten Zähler- und Instanzdaten abgerufen werden.

Ein Leistungsindikator veröffentlicht Leistungsdaten einer Anwendung. Kategorien umfassen physikalische Komponenten, z. B. Prozessoren, Datenträger und Speicher, sowie Systemobjekte, z. B. Prozesse und Threads. Systemindikatoren, die mit demselben Leistungsobjekt verknüpft sind, werden in einer Kategorie zusammengefasst, die ihren gemeinsamen Bezugspunkt angibt. Beim Erstellen einer Instanz der PerformanceCounter-Klasse geben Sie zuerst die Kategorie an, mit der die Komponente interagieren soll, und wählen anschließend aus dieser Kategorie einen Zähler aus.

Ein Beispiel für eine Indikatorkategorie in Windows ist die Kategorie Speicher. Systemindikatoren in dieser Kategorie verfolgen Speicherdaten, z. B. die Anzahl verfügbarer oder zwischengespeicherter Bytes. Wenn Sie mit den in der Anwendung zwischengespeicherten Bytes arbeiten möchten, erstellen Sie eine Instanz der PerformanceCounter-Komponente, verbinden sie mit der Kategorie Speicher und wählen aus dieser Kategorie dann den entsprechenden Zähler (in diesem Fall Cachebytes) aus.

Obwohl auf Ihrem System eine Vielzahl weiterer Indikatorkategorien verfügbar ist, werden Sie i. d. R. mit folgenden Kategorien arbeiten: Cache, Speicher, Objekte, Physikalischer Datenträger, Prozessor, Server, System und Thread.

Wichtig

Die RemoveInstance-Methode in der PerformanceCounter-Klasse gibt den Zähler frei. Wenn die Option zum Wiederverwenden für diese Kategorie ausgewählt ist, wird die Instanz des Zählers wiederverwendet. Dies könnte eine Racebedingung verursachen, wenn ein anderer Prozess oder auch ein anderer Codeteil versucht, in die Zählerinstanz zu schreiben.

Beispiel

Im folgenden Codebeispiel wird bestimmt, ob ein PerformanceCounter und seine PerformanceCounterCategory auf dem lokalen Computer oder auf einem anderen Computer vorhanden sind. Wenn diese Objekte nicht auf dem lokalen Computer vorhanden sind, werden sie im Beispiel optional erstellt. Mit der Exists-Methode wird bestimmt, ob die PerformanceCounterCategory vorhanden ist. Wenn die PerformanceCounterCategory nicht vorhanden ist und kein Zählername angegeben wurde oder wenn es sich bei dem Computer um einen Remotecomputer handelt, wird das Beispiel beendet.

Wenn ein PerformanceCounter-Name bereitgestellt wird, wird im Beispiel die CounterExists-Methode verwendet, und dem Benutzer wird das Ergebnis angezeigt. Wenn der PerformanceCounter nicht vorhanden ist, kann der Benutzer die PerformanceCounterCategory löschen und mit dem neuen PerformanceCounter erneut erstellen. Führt der Benutzer dies durch, wird die Kategorie mit der Delete-Methode gelöscht.

Wenn dies angefordert wird, werden im Beispiel jetzt die neue PerformanceCounterCategory und der PerformanceCounter mit der Create-Methode erstellt. Bei Angabe eines Instanznamens wird im Beispiel die InstanceExists-Methode verwendet, und das Ergebnis wird angezeigt.

Imports System
Imports System.Diagnostics
Imports Microsoft.VisualBasic

Module PerfCounterCatCreateExistMod

    Sub Main(ByVal args() As String)
        Dim categoryName As String = ""
        Dim counterName As String = ""
        Dim instanceName As String = ""
        Dim machineName As String = ""
        Dim categoryHelp As String = ""
        Dim counterHelp As String = ""
        Dim objectExists As Boolean = False
        Dim pcc As PerformanceCounterCategory
        Dim createCategory As Boolean = False

        ' Copy the supplied arguments into the local variables.
        Try
            categoryName = args(0)
            counterName = args(1)
            instanceName = args(2)
            machineName = IIf(args(3) = ".", "", args(3))
            categoryHelp = args(4)
            counterHelp = args(5)
        Catch ex As Exception
            ' Ignore the exception from non-supplied arguments.
        End Try

        ' Verify that the category name is not blank.
        If categoryName.Length = 0 Then
            Console.WriteLine("Category name cannot be blank.")
            Return
        End If

        ' Check whether the specified category exists.
        If machineName.Length = 0 Then
            objectExists = _
                PerformanceCounterCategory.Exists(categoryName)

        Else
            ' Handle the exception that is thrown if the computer 
            ' cannot be found.
            Try
                objectExists = PerformanceCounterCategory.Exists( _
                    categoryName, machineName)
            Catch ex As Exception
                Console.WriteLine("Error checking for existence of " & _
                    "category ""{0}"" on computer ""{1}"":" & vbCrLf & _
                    ex.Message, categoryName, machineName)
                Return
            End Try
        End If

        ' Tell the user whether the specified category exists.
        Console.WriteLine("Category ""{0}"" " & _
            IIf(objectExists, "exists on ", "does not exist on ") & _
            IIf(machineName.Length > 0, _
                "computer ""{1}"".", "this computer."), _
            categoryName, machineName)

        ' If no counter name is given, the program cannot continue.
        If counterName.Length = 0 Then
            Return
        End If

        ' A category can only be created on the local computer.
        If Not objectExists Then
            If machineName.Length > 0 Then
                Return
            Else
                createCategory = True
            End If
        Else
            ' Check whether the specified counter exists.
            If machineName.Length = 0 Then
                objectExists = PerformanceCounterCategory.CounterExists( _
                    counterName, categoryName)
            Else
                objectExists = PerformanceCounterCategory.CounterExists( _
                    counterName, categoryName, machineName)
            End If

            ' Tell the user whether the counter exists.
            Console.WriteLine("Counter ""{0}"" " & _
                IIf(objectExists, "exists", "does not exist") & _
                " in category ""{1}"" on " & _
                IIf(machineName.Length > 0, _
                    "computer ""{2}"".", "this computer."), _
                counterName, categoryName, machineName)

            ' If the counter does not exist, consider creating it.
            If Not objectExists Then

                ' If this is a remote computer, 
                ' exit because the category cannot be created.
                If machineName.Length > 0 Then
                    Return
                Else
                    ' Ask whether the user wants to recreate the category.
                    Console.Write("Do you want to delete and recreate " & _
                        "category ""{0}"" with your new counter? [Y/N]: ", _
                        categoryName)
                    Dim userReply As String = Console.ReadLine()

                    ' If yes, delete the category so it can be recreated later.
                    If userReply.Trim.ToUpper.Chars(0) = "Y" Then
                        PerformanceCounterCategory.Delete(categoryName)
                        createCategory = True
                    Else
                        Return
                    End If
                End If
            End If
        End If

        ' Create the category if it was deleted or it never existed.
        If createCategory Then
            pcc = PerformanceCounterCategory.Create( _
                categoryName, categoryHelp, counterName, counterHelp)

            Console.WriteLine( _
                "Category ""{0}"" with counter ""{1}"" created.", _
                pcc.CategoryName, counterName)

        ElseIf instanceName.Length > 0 Then

            ' If an instance name was given, check whether it exists.
            If machineName.Length = 0 Then
                objectExists = PerformanceCounterCategory.InstanceExists( _
                    instanceName, categoryName)
            Else
                objectExists = PerformanceCounterCategory.InstanceExists( _
                    instanceName, categoryName, machineName)
            End If

            ' Tell the user whether the instance exists.
            Console.WriteLine("Instance ""{0}"" " & _
                IIf(objectExists, "exists", "does not exist") & _
                " in category ""{1}"" on " & _
                IIf(machineName.Length > 0, _
                    "computer ""{2}"".", "this computer."), _
                instanceName, categoryName, machineName)
        End If
    End Sub
End Module

Vererbungshierarchie

System.Object
  System.Diagnostics.PerformanceCounterCategory

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

PerformanceCounterCategory-Member
System.Diagnostics-Namespace
PerformanceCounter-Klasse
CounterCreationDataCollection-Klasse
CounterSample-Struktur