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