PerformanceCounterCategory Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Representerar ett prestandaobjekt som definierar en kategori med prestandaräknare.
public ref class PerformanceCounterCategory sealed
public sealed class PerformanceCounterCategory
type PerformanceCounterCategory = class
Public NotInheritable Class PerformanceCounterCategory
- Arv
-
PerformanceCounterCategory
Exempel
I följande kodexempel avgörs om en PerformanceCounter och dess PerformanceCounterCategory finns på den lokala datorn eller på en annan dator. Om dessa objekt inte finns på den lokala datorn kan du skapa dem i exemplet. Den använder Exists metoden för att avgöra om den PerformanceCounterCategory finns. Om inte PerformanceCounterCategory finns och inget räknarnamn har angetts, eller om datorn är en fjärrdator, avslutas exemplet.
Om ett PerformanceCounter namn anges använder CounterExists exemplet metoden och visar resultatet för användaren. Om inte PerformanceCounter finns kan användaren ta bort och återskapa PerformanceCounterCategory med den nya PerformanceCounter. Om användaren gör det tas kategorin bort med hjälp av Delete metoden .
Om det begärs skapar exemplet nu det nya PerformanceCounterCategory och PerformanceCounter med hjälp av Create metoden. Om ett instansnamn anges använder InstanceExists exemplet metoden och visar resultatet.
using System;
using System.Diagnostics;
using Microsoft.VisualBasic;
class PerfCounterCatCreateExistMod
{
public static void Main(string[] args)
{
string categoryName = "";
string counterName = "";
string instanceName = "";
string machineName = "";
string categoryHelp = "";
string counterHelp = "";
bool objectExists = false;
PerformanceCounterCategory pcc;
bool createCategory = false;
// Copy the supplied arguments into the local variables.
try
{
categoryName = args[0];
counterName = args[1];
instanceName = args[2];
machineName = args[3]=="."? "": args[3];
categoryHelp = args[4];
counterHelp = args[5];
}
catch(Exception ex)
{
// Ignore the exception from non-supplied arguments.
}
// Verify that the category name is not blank.
if (categoryName.Length==0)
{
Console.WriteLine("Category name cannot be blank.");
return;
}
// Check whether the specified category exists.
if (machineName.Length==0)
{
objectExists = PerformanceCounterCategory.Exists(categoryName);
}
else
{
// Handle the exception that is thrown if the computer
// cannot be found.
try
{
objectExists = PerformanceCounterCategory.Exists(categoryName, machineName);
}
catch(Exception ex)
{
Console.WriteLine("Error checking for existence of " +
"category \"{0}\" on computer \"{1}\":"+"\n" +ex.Message, categoryName, machineName);
return;
}
}
// Tell the user whether the specified category exists.
Console.WriteLine("Category \"{0}\" "+ (objectExists? "exists on ": "does not exist on ")+
(machineName.Length>0? "computer \"{1}\".": "this computer."), categoryName, machineName);
// If no counter name is given, the program cannot continue.
if (counterName.Length==0)
{
return;
}
// A category can only be created on the local computer.
if (!objectExists)
{
if (machineName.Length>0)
{
return;
}
else
{
createCategory = true;
}
}
else
{
// Check whether the specified counter exists.
if (machineName.Length==0)
{
objectExists = PerformanceCounterCategory.CounterExists(counterName, categoryName);
}
else
{
objectExists = PerformanceCounterCategory.CounterExists(counterName, categoryName, machineName);
}
// Tell the user whether the counter exists.
Console.WriteLine("Counter \"{0}\" "+(objectExists? "exists": "does not exist")+
" in category \"{1}\" on "+(machineName.Length>0? "computer \"{2}\".": "this computer."),
counterName, categoryName, machineName);
// If the counter does not exist, consider creating it.
if (!objectExists)
// If this is a remote computer,
// exit because the category cannot be created.
{
if (machineName.Length>0)
{
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);
string userReply = Console.ReadLine();
// If yes, delete the category so it can be recreated later.
if (userReply.Trim().ToUpper()=="Y")
{
PerformanceCounterCategory.Delete(categoryName);
createCategory = true;
}
else
{
return;
}
}
}
}
// Create the category if it was deleted or it never existed.
if (createCategory)
{
pcc = PerformanceCounterCategory.Create(categoryName, categoryHelp, counterName, counterHelp);
Console.WriteLine("Category \"{0}\" with counter \"{1}\" created.", pcc.CategoryName, counterName);
}
else if(instanceName.Length>0)
{
if (machineName.Length==0)
{
objectExists = PerformanceCounterCategory.InstanceExists(instanceName, categoryName);
}
else
{
objectExists = PerformanceCounterCategory.InstanceExists(instanceName, categoryName, machineName);
}
// Tell the user whether the instance exists.
Console.WriteLine("Instance \"{0}\" "+(objectExists? "exists": "does not exist")+
" in category \"{1}\" on " + (machineName.Length>0? "computer \"{2}\".": "this computer."),
instanceName, categoryName, machineName);
}
}
}
Imports System.Diagnostics
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
Kommentarer
Viktigt!
För att skapa eller ta bort en prestandaräknare krävs synkronisering av den underliggande koden med hjälp av en namngiven mutex. Om ett högprivilegierat program låser den namngivna mutexen, gör försök att skapa eller ta bort en prestandaräknare att programmet slutar svara tills låset släpps. För att undvika det här problemet kan du aldrig ge UnmanagedCode behörighet till kod som inte är betrodd. Dessutom UnmanagedCode kan behörigheter eventuellt tillåta att andra behörigheter kringgås och bör endast beviljas mycket betrodd kod.
Instansens PerformanceCounterCategoryCategoryName egenskap visas i fältet Prestandaobjekt i dialogrutan Lägg till räknare i programmet Prestandavisning.
Klassen PerformanceCounterCategory innehåller flera metoder för att interagera med räknare och kategorier på datorn. Med Create metoderna kan du definiera anpassade kategorier. Metoden Delete ger ett sätt att ta bort kategorier från datorn. Med GetCategories metoden kan du visa listan över kategorier, samtidigt ReadCategory som alla räknar- och instansdata som är associerade med en enda kategori hämtas.
En prestandaräknare publicerar prestandadata om ett program. Kategorier omfattar fysiska komponenter (till exempel processorer, diskar och minne) och systemobjekt (till exempel processer och trådar). Systemräknare som är relaterade till samma prestandaobjekt grupperas i en kategori som anger deras gemensamma fokus. När du skapar en instans av PerformanceCounter klassen anger du först den kategori som komponenten ska interagera med och sedan väljer du en räknare från den kategorin.
En Windows räknarkategori är till exempel kategorin Minne. Systemräknare i den här kategorin spårar minnesdata, till exempel antalet tillgängliga byte och antalet cachelagrade byte. Om du vill arbeta med byte som cachelagras i ditt program skapar du en instans av komponenten PerformanceCounter , ansluter den till kategorin Minne och väljer sedan lämplig räknare (i det här fallet cachelagrade byte) från den kategorin.
Även om systemet gör många fler räknare tillgängliga är de kategorier som du förmodligen interagerar med oftast kategorierna Cache, Minne, Objekt, PhysicalDisk, Process, Processor, Server, System och Thread.
Viktigt!
Metoden RemoveInstance i PerformanceCounter klassen släpper räknaren och om återanvändningsalternativet har valts för den kategorin återanvänds räknarens instans. Detta kan orsaka ett konkurrenstillstånd om en annan process eller till och med en annan del av koden försöker skriva till räknarinstansen.
Anteckning
Vi rekommenderar starkt att nya prestandaräknare kategorier skapas under installationen av programmet, inte under körningen av programmet. Detta gör det möjligt för operativsystemet att uppdatera sin lista över registrerade kategorier för prestandaräknare. Om listan inte har uppdaterats misslyckas försöket att använda kategorin.
Anteckning
Prestandaräknare som installeras med .NET använda separat delat minne, där varje kategori för prestandaräknare har sitt eget minne. Du kan ange storleken på separat delat minne genom att skapa ett DWORD med namnet FileMappingSize i registernyckeln HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<kategorinamn>\Prestanda. Värdet FileMappingSize är inställt på kategorins delade minnesstorlek. Standardstorleken är 131072 decimal. Om värdet FileMappingSize inte finns fileMappingSize används attributvärdet för elementet performanceCounters som anges i Machine.config-filen, vilket orsakar ytterligare omkostnader för bearbetning av konfigurationsfiler. Du kan se en prestandaförbättring för programstart genom att ange filmappningsstorleken i registret. Mer information om filmappningsstorleken finns i <performanceCounters>.
Konstruktorer
| Name | Description |
|---|---|
| PerformanceCounterCategory() |
Initierar en ny instans av PerformanceCounterCategory klassen, lämnar CategoryName egenskapen tom och anger MachineName egenskapen till den lokala datorn. |
| PerformanceCounterCategory(String, String) |
Initierar en ny instans av PerformanceCounterCategory klassen och anger CategoryName egenskaperna och MachineName till de angivna värdena. |
| PerformanceCounterCategory(String) |
Initierar en ny instans av PerformanceCounterCategory klassen, anger CategoryName egenskapen till det angivna värdet och anger MachineName egenskapen till den lokala datorn. |
Egenskaper
| Name | Description |
|---|---|
| CategoryHelp |
Hämtar kategorins hjälptext. |
| CategoryName |
Hämtar eller anger namnet på prestandaobjektet som definierar den här kategorin. |
| CategoryType |
Hämtar kategoritypen prestandaräknare. |
| MachineName |
Hämtar eller anger namnet på den dator där den här kategorin finns. |
Metoder
| Name | Description |
|---|---|
| CounterExists(String, String, String) |
Avgör om den angivna räknaren är registrerad i den angivna kategorin på en fjärrdator. |
| CounterExists(String, String) |
Avgör om den angivna räknaren är registrerad i den angivna kategorin på den lokala datorn. |
| CounterExists(String) |
Avgör om den angivna räknaren är registrerad i den här kategorin, vilket anges av CategoryName egenskaperna och MachineName . |
| Create(String, String, CounterCreationDataCollection) |
Föråldrad.
Registrerar kategorin för anpassade prestandaräknare som innehåller de angivna räknarna på den lokala datorn. |
| Create(String, String, PerformanceCounterCategoryType, CounterCreationDataCollection) |
Registrerar kategorin för anpassade prestandaräknare som innehåller de angivna räknarna på den lokala datorn. |
| Create(String, String, PerformanceCounterCategoryType, String, String) |
Registrerar kategorin för anpassade prestandaräknare som innehåller en enskild räknare av typen NumberOfItems32 på den lokala datorn. |
| Create(String, String, String, String) |
Föråldrad.
Registrerar en anpassad prestandaräknare som innehåller en enskild räknare av typen |
| Delete(String) |
Tar bort kategorin och dess associerade räknare från den lokala datorn. |
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| Exists(String, String) |
Avgör om kategorin är registrerad på den angivna datorn. |
| Exists(String) |
Avgör om kategorin är registrerad på den lokala datorn. |
| GetCategories() |
Hämtar en lista över kategorierna för prestandaräknare som är registrerade på den lokala datorn. |
| GetCategories(String) |
Hämtar en lista över de prestandaräknarekategorier som är registrerade på den angivna datorn. |
| GetCounters() |
Hämtar en lista över räknarna i en prestandaräknarekategori som innehåller exakt en instans. |
| GetCounters(String) |
Hämtar en lista över räknarna i en prestandaräknarekategori som innehåller en eller flera instanser. |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetInstanceNames() |
Hämtar listan över prestandaobjektinstanser som är associerade med den här kategorin. |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| InstanceExists(String, String, String) |
Avgör om en angiven kategori på en angiven dator innehåller den angivna prestandaobjektinstansen. |
| InstanceExists(String, String) |
Avgör om en angiven kategori på den lokala datorn innehåller den angivna prestandaobjektinstansen. |
| InstanceExists(String) |
Avgör om den angivna prestandaobjektinstansen finns i den kategori som identifieras av objektets PerformanceCounterCategoryCategoryName egenskap. |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| ReadCategory() |
Läser alla instansdata för räknar- och prestandaobjekt som är associerade med den här prestandaräknarens kategori. |
| ToString() |
Returnerar en sträng som representerar det aktuella objektet. (Ärvd från Object) |