PerformanceCounterCategory Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Teljesítményobjektumot jelöl, amely a teljesítményszámlálók kategóriáját határozza meg.
public ref class PerformanceCounterCategory sealed
public sealed class PerformanceCounterCategory
type PerformanceCounterCategory = class
Public NotInheritable Class PerformanceCounterCategory
- Öröklődés
-
PerformanceCounterCategory
Példák
Az alábbi példakód azt határozza meg, hogy egy PerformanceCounter és annak PerformanceCounterCategory létezik-e a helyi számítógépen vagy egy másik számítógépen. Ha ezek az objektumok nem léteznek a helyi számítógépen, a példa opcionálisan létrehozza őket. A metódus használatával Exists állapítja meg, hogy létezik-e.PerformanceCounterCategory Ha a PerformanceCounterCategory számítógép nem létezik, és nincs megadva számlálónév, vagy ha a számítógép távoli gép, a példa kilép.
Ha megad egy PerformanceCounter nevet, a példa a metódust CounterExists használja, és megjeleníti az eredményt a felhasználónak. Ha a PerformanceCounter rendszer nem létezik, a felhasználó törölheti és újra létrehozhatja az PerformanceCounterCategory újat PerformanceCounter. Ha a felhasználó ezt teszi, a kategória a módszerrel törlődik Delete .
Ha kéri, a példa most létrehozza az újat PerformanceCounterCategory , és PerformanceCounter használja a metódust Create . Ha egy példánynév van megadva, a példa a metódust InstanceExists használja, és megjeleníti az eredményt.
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
Megjegyzések
Important
A teljesítményszámláló létrehozásához vagy törléséhez szinkronizálni kell a mögöttes kódot egy nevesített mutex használatával. Ha egy magas jogosultságú alkalmazás zárolja a nevesített mutexet, a teljesítményszámláló létrehozására vagy törlésére tett kísérletek hatására az alkalmazás a zárolás feloldásáig nem válaszol. A probléma elkerülése érdekében soha ne adjon UnmanagedCode engedélyt a nem megbízható kódra. Emellett az engedély más engedélyek megkerülését is lehetővé teszi, UnmanagedCode és csak magas megbízhatóságú kóddal adható meg.
A PerformanceCounterCategory példány tulajdonsága CategoryName a Teljesítménymegjelenítő alkalmazás Számláló hozzáadása párbeszédpanelJének Teljesítményobjektum mezőjében jelenik meg.
Az PerformanceCounterCategory osztály számos módszert kínál a számlálókkal és a kategóriákkal való interakcióhoz a számítógépen. A Create metódusokkal egyéni kategóriákat határozhat meg. A Delete módszer lehetővé teszi a kategóriák eltávolítását a számítógépről. A GetCategories módszer lehetővé teszi a kategóriák listájának megtekintését, miközben ReadCategory lekéri az egyetlen kategóriához társított számláló- és példányadatokat.
A teljesítményszámláló közzéteszi az alkalmazás teljesítményadatait. A kategóriák közé tartoznak a fizikai összetevők (például processzorok, lemezek és memória) és a rendszerobjektumok (például folyamatok és szálak). Az ugyanahhoz a teljesítményobjektumhoz kapcsolódó rendszerszámlálók olyan kategóriába vannak csoportosítva, amely a közös fókuszt jelzi. Az osztály egy példányának PerformanceCounter létrehozásakor először azt a kategóriát jelöli meg, amellyel az összetevő interakcióba lép, majd kiválaszt egy számlálót az adott kategóriából.
Az egyik Windows számláló kategória például a Memória kategória. A kategória rendszerszámlálói nyomon követik a memóriaadatokat, például a rendelkezésre álló bájtok számát és a gyorsítótárazott bájtok számát. Ha az alkalmazásban gyorsítótárazott bájtokkal szeretne dolgozni, létre kell hoznia az PerformanceCounter összetevő egy példányát, csatlakoztatnia kell a Memória kategóriához, majd kiválasztania a megfelelő számlálót (ebben az esetben a gyorsítótárazott bájtokat) az adott kategóriából.
Bár a rendszer sokkal több számlálókategóriát tesz elérhetővé, a leggyakrabban használt kategóriák a Gyorsítótár, a Memória, az Objektumok, a PhysicalDisk, a Folyamat, a Processzor, a Kiszolgáló, a Rendszer és a Szál kategóriák.
Important
Az RemoveInstance osztály metódusa PerformanceCounter felszabadítja a számlálót, és ha az adott kategóriához az újrafelhasználási lehetőség van kiválasztva, a számláló példánya újra felhasználható lesz. Ez versenyhelyzetet okozhat, ha egy másik folyamat vagy a kód egy másik része próbál írni a számlálópéldányra.
Note
Erősen ajánlott új teljesítményszámlálókat létrehozni az alkalmazás telepítése során, nem pedig az alkalmazás végrehajtása során. Így az operációs rendszer frissítheti a regisztrált teljesítményszámláló-kategóriák listáját. Ha a lista nem frissült, a kategória használatára tett kísérlet sikertelen lesz.
Note
A .NET telepített teljesítményszámláló-kategóriák külön megosztott memóriát használnak, és minden teljesítményszámláló-kategória saját memóriával rendelkezik. A különálló megosztott memória méretét úgy adhatja meg, hogy létrehoz egy FileMappingSize nevű DWORD-t a beállításkulcsban, HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<kategórianév>\Teljesítmény. A FileMappingSize érték a kategória megosztott memóriaméretére van állítva. Az alapértelmezett méret 131072 decimális. Ha a FileMappingSize érték nem található, a rendszer a fileMappingSize Machine.config fájlban megadott elem attribútumértékét performanceCounters használja, ami további többletterhelést okoz a konfigurációs fájlok feldolgozásához. A beállításjegyzék fájlleképezési méretének beállításával teljesítménybeli javulást érhet el az alkalmazás indításakor. A fájlleképezés méretével kapcsolatos további információkért lásd <: performanceCounters>.
Konstruktorok
| Name | Description |
|---|---|
| PerformanceCounterCategory() |
Inicializálja az PerformanceCounterCategory osztály új példányát, üresen hagyja a CategoryName tulajdonságot, és beállítja a MachineName tulajdonságot a helyi számítógépre. |
| PerformanceCounterCategory(String, String) |
Inicializálja az PerformanceCounterCategory osztály új példányát, és beállítja a CategoryNameMachineName tulajdonságokat a megadott értékekre. |
| PerformanceCounterCategory(String) |
Inicializálja az PerformanceCounterCategory osztály új példányát, beállítja a CategoryName tulajdonságot a megadott értékre, és beállítja a MachineName tulajdonságot a helyi számítógépre. |
Tulajdonságok
| Name | Description |
|---|---|
| CategoryHelp |
Lekéri a kategória súgószövegét. |
| CategoryName |
Lekéri vagy beállítja a kategóriát meghatározó teljesítményobjektum nevét. |
| CategoryType |
Lekéri a teljesítményszámláló kategóriatípusát. |
| MachineName |
Lekéri vagy beállítja annak a számítógépnek a nevét, amelyen ez a kategória létezik. |
Metódusok
| Name | Description |
|---|---|
| CounterExists(String, String, String) |
Meghatározza, hogy a megadott számláló regisztrálva van-e a megadott kategóriához egy távoli számítógépen. |
| CounterExists(String, String) |
Meghatározza, hogy a megadott számláló regisztrálva van-e a helyi számítógépen a megadott kategóriához. |
| CounterExists(String) |
Meghatározza, hogy a megadott számláló regisztrálva van-e ehhez a kategóriához, amelyet a CategoryName tulajdonságok jeleznek MachineName . |
| Create(String, String, CounterCreationDataCollection) |
Elavult.
Elavult.
Elavult.
Regisztrálja a helyi számítógépen megadott számlálókat tartalmazó egyéni teljesítményszámláló kategóriát. |
| Create(String, String, PerformanceCounterCategoryType, CounterCreationDataCollection) |
Regisztrálja a helyi számítógépen megadott számlálókat tartalmazó egyéni teljesítményszámláló kategóriát. |
| Create(String, String, PerformanceCounterCategoryType, String, String) |
Regisztrálja az egyéni teljesítményszámláló kategóriát, amely egyetlen típusú NumberOfItems32 számlálót tartalmaz a helyi számítógépen. |
| Create(String, String, String, String) |
Elavult.
Elavult.
Elavult.
Regisztrál egy egyéni teljesítményszámláló kategóriát, amely egyetlen típusú |
| Delete(String) |
Eltávolítja a kategóriát és a hozzá tartozó számlálókat a helyi számítógépről. |
| Equals(Object) |
Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal. (Öröklődés forrása Object) |
| Exists(String, String) |
Meghatározza, hogy a kategória regisztrálva van-e a megadott számítógépen. |
| Exists(String) |
Meghatározza, hogy a kategória regisztrálva van-e a helyi számítógépen. |
| GetCategories() |
Lekéri a helyi számítógépen regisztrált teljesítményszámláló-kategóriák listáját. |
| GetCategories(String) |
Lekéri a megadott számítógépen regisztrált teljesítményszámláló-kategóriák listáját. |
| GetCounters() |
Lekéri a teljesítményszámlálók kategóriájának számlálóinak listáját, amely pontosan egy példányt tartalmaz. |
| GetCounters(String) |
Egy vagy több példányt tartalmazó teljesítményszámláló-kategória számlálóinak listáját kéri le. |
| GetHashCode() |
Ez az alapértelmezett kivonatoló függvény. (Öröklődés forrása Object) |
| GetInstanceNames() |
Lekéri az ehhez a kategóriához társított teljesítményobjektum-példányok listáját. |
| GetType() |
Lekéri az Type aktuális példányt. (Öröklődés forrása Object) |
| InstanceExists(String, String, String) |
Meghatározza, hogy egy adott számítógép adott kategóriája tartalmazza-e a megadott teljesítményobjektum-példányt. |
| InstanceExists(String, String) |
Meghatározza, hogy a helyi számítógépen található adott kategória tartalmazza-e a megadott teljesítményobjektum-példányt. |
| InstanceExists(String) |
Meghatározza, hogy a megadott teljesítményobjektum-példány létezik-e abban a kategóriában, amelyet az PerformanceCounterCategory objektum tulajdonsága CategoryName azonosít. |
| MemberwiseClone() |
Az aktuális Objectpéldány sekély másolatát hozza létre. (Öröklődés forrása Object) |
| ReadCategory() |
Beolvassa az összes számláló- és teljesítményobjektum-példány adatait, amelyek ehhez a teljesítményszámláló-kategóriához tartoznak. |
| ToString() |
Az aktuális objektumot jelképező sztringet ad vissza. (Öröklődés forrása Object) |