PerformanceCounterCategory Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Rappresenta un oggetto delle prestazioni, che definisce una categoria di contatori delle prestazioni.
public ref class PerformanceCounterCategory sealed
public sealed class PerformanceCounterCategory
type PerformanceCounterCategory = class
Public NotInheritable Class PerformanceCounterCategory
- Ereditarietà
-
PerformanceCounterCategory
Esempio
Nell'esempio di codice seguente viene determinato se un PerformanceCounter oggetto e il relativo PerformanceCounterCategory oggetto sono presenti nel computer locale o in un altro computer. Se questi oggetti non esistono nel computer locale, l'esempio li crea facoltativamente. Usa il Exists metodo per determinare se esiste PerformanceCounterCategory . Se l'oggetto PerformanceCounterCategory non esiste e non viene specificato alcun nome di contatore oppure se il computer è un computer remoto, l'esempio viene chiuso.
Se viene specificato un PerformanceCounter nome, nell'esempio viene utilizzato il CounterExists metodo e viene visualizzato il risultato all'utente. Se l'oggetto PerformanceCounter non esiste, l'utente può eliminare e ricreare con PerformanceCounterCategory il nuovo PerformanceCounteroggetto . Se l'utente esegue questa operazione, la categoria viene eliminata usando il Delete metodo .
Se richiesto, l'esempio crea ora il nuovo PerformanceCounterCategory oggetto e PerformanceCounter usa il Create metodo . Se viene specificato un nome di istanza, nell'esempio viene utilizzato il InstanceExists metodo e viene visualizzato il risultato.
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
Commenti
Importante
La creazione o l'eliminazione di un contatore delle prestazioni richiede la sincronizzazione del codice sottostante usando un mutex denominato. Se un'applicazione con privilegi elevati blocca il mutex denominato, tenta di creare o eliminare un contatore delle prestazioni determina l'interruzione della risposta dell'applicazione fino al rilascio del blocco. Per evitare questo problema, non concedere UnmanagedCode mai l'autorizzazione al codice non attendibile. Inoltre, UnmanagedCode l'autorizzazione consente potenzialmente di ignorare altre autorizzazioni e deve essere concessa solo al codice altamente attendibile.
La PerformanceCounterCategory proprietà dell'istanza CategoryName viene visualizzata nel campo Oggetto prestazioni della finestra di dialogo Aggiungi contatore dell'applicazione Visualizzatore prestazioni.
La PerformanceCounterCategory classe fornisce diversi metodi per interagire con contatori e categorie nel computer. I Create metodi consentono di definire categorie personalizzate. Il Delete metodo consente di rimuovere le categorie dal computer. Il GetCategories metodo consente di visualizzare l'elenco delle categorie, recuperando ReadCategory tutti i dati del contatore e dell'istanza associati a una singola categoria.
Un contatore delle prestazioni pubblica i dati sulle prestazioni relativi a un'applicazione. Le categorie includono componenti fisici(ad esempio processori, dischi e memoria) e oggetti di sistema (ad esempio processi e thread). I contatori di sistema correlati allo stesso oggetto prestazioni vengono raggruppati in una categoria che indica lo stato attivo comune. Quando si crea un'istanza della PerformanceCounter classe , si indica innanzitutto la categoria con cui il componente interagirà e quindi si sceglie un contatore da tale categoria.
Ad esempio, una categoria di contatori di Windows è la categoria Memory. I contatori di sistema all'interno di questa categoria tengono traccia dei dati di memoria, ad esempio il numero di byte disponibili e il numero di byte memorizzati nella cache. Se si desidera utilizzare i byte memorizzati nella cache nell'applicazione, è necessario creare un'istanza del PerformanceCounter componente, connetterla alla categoria Memoria e quindi selezionare il contatore appropriato (in questo caso, Byte memorizzati nella cache) da tale categoria.
Anche se il sistema rende disponibili molte più categorie di contatori, le categorie con cui probabilmente interagirai più di frequente sono le categorie Cache, Memoria, Oggetti, PhysicalDisk, Process, Processor, Server, System e Thread.
Importante
Il RemoveInstance metodo nella PerformanceCounter classe rilascia il contatore e, se l'opzione di riutilizzo è selezionata per tale categoria, l'istanza del contatore verrà riutilizzata. Ciò può causare una race condition se un altro processo o anche un'altra parte del codice sta tentando di scrivere nell'istanza del contatore.
Nota
È consigliabile creare nuove categorie di contatori delle prestazioni durante l'installazione dell'applicazione, non durante l'esecuzione dell'applicazione. Ciò consente al sistema operativo di aggiornare l'elenco delle categorie di contatori delle prestazioni registrate. Se l'elenco non è stato aggiornato, il tentativo di utilizzare la categoria avrà esito negativo.
Nota
Le categorie di contatori delle prestazioni installate con .NET Framework 2.0 usano una memoria condivisa separata, con ogni categoria di contatori delle prestazioni con una propria memoria. È possibile specificare le dimensioni della memoria condivisa separata creando un DWORD denominato FileMappingSize nella chiave del Registro di sistema HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<nome> categoria\Prestazioni. Il valore FileMappingSize viene impostato sulle dimensioni della memoria condivisa della categoria. La dimensione predefinita è 131072 decimale. Se il valore FileMappingSize non è presente, viene utilizzato il fileMappingSize
valore dell'attributo per l'elemento specificato nel file Machine.config, causando un sovraccarico aggiuntivo per l'elaborazione performanceCounters
dei file di configurazione. È possibile ottenere un miglioramento delle prestazioni per l'avvio dell'applicazione impostando le dimensioni del mapping dei file nel Registro di sistema. Per altre informazioni sulle dimensioni del mapping dei file, vedere <performanceCounters>.
Costruttori
PerformanceCounterCategory() |
Consente di inizializzare una nuova istanza della classe PerformanceCounterCategory, lascia vuota la proprietà CategoryName e imposta la proprietà MachineName sul computer locale. |
PerformanceCounterCategory(String) |
Consente di inizializzare una nuova istanza della classe PerformanceCounterCategory, imposta la proprietà CategoryName sul valore specificato e la proprietà MachineName sul computer locale. |
PerformanceCounterCategory(String, String) |
Consente di inizializzare una nuova istanza della classe PerformanceCounterCategory e imposta le proprietà CategoryName e MachineName sui valori specificati. |
Proprietà
CategoryHelp |
Ottiene il testo della Guida della categoria. |
CategoryName |
Ottiene o imposta il nome dell'oggetto delle prestazioni che definisce questa categoria. |
CategoryType |
Ottiene il tipo di categoria del contatore delle prestazioni. |
MachineName |
Ottiene o imposta il nome del computer sul quale è presente questa categoria. |
Metodi
CounterExists(String) |
Determina se il contatore specificato è registrato in questa categoria, indicata dalle proprietà CategoryName e MachineName. |
CounterExists(String, String) |
Determina se il contatore specificato è registrato nella categoria specificata sul computer locale. |
CounterExists(String, String, String) |
Determina se il contatore specificato è registrato nella categoria specificata in un computer remoto. |
Create(String, String, CounterCreationDataCollection) |
Obsoleti.
Obsoleti.
Obsoleti.
Registra la categoria personalizzata di contatori delle prestazioni contenente i contatori specificati sul computer locale. |
Create(String, String, PerformanceCounterCategoryType, CounterCreationDataCollection) |
Registra la categoria personalizzata di contatori delle prestazioni contenente i contatori specificati sul computer locale. |
Create(String, String, PerformanceCounterCategoryType, String, String) |
Registra la categoria personalizzata di contatori delle prestazioni contenente un solo contatore di tipo NumberOfItems32 sul computer locale. |
Create(String, String, String, String) |
Obsoleti.
Obsoleti.
Obsoleti.
Registra una categoria personalizzata di contatori delle prestazioni contenente un solo contatore di tipo |
Delete(String) |
Rimuove la categoria e i contatori associati dal computer locale. |
Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
Exists(String) |
Determina se la categoria è registrata sul computer locale. |
Exists(String, String) |
Determina se la categoria è registrata sul computer specificato. |
GetCategories() |
Recupera un elenco di categorie di contatori delle prestazioni registrate sul computer locale. |
GetCategories(String) |
Recupera un elenco di categorie di contatori delle prestazioni registrate sul computer specificato. |
GetCounters() |
Recupera un elenco di contatori in una categoria di contatori delle prestazioni che contiene esattamente un'istanza. |
GetCounters(String) |
Recupera un elenco di contatori in una categoria di contatori delle prestazioni che contiene una o più istanze. |
GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
GetInstanceNames() |
Recupera l'elenco di istanze dell'oggetto delle prestazioni associate a questa categoria. |
GetType() |
Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object) |
InstanceExists(String) |
Determina se l'istanza dell'oggetto delle prestazioni specificato è presente nella categoria identificata dalla proprietà PerformanceCounterCategory di questo oggetto CategoryName. |
InstanceExists(String, String) |
Determina se una categoria specificata sul computer locale contiene l'istanza dell'oggetto delle prestazioni specificato. |
InstanceExists(String, String, String) |
Determina se una categoria specificata su un particolare computer contiene l'istanza dell'oggetto delle prestazioni specificato. |
MemberwiseClone() |
Crea una copia superficiale dell'oggetto Object corrente. (Ereditato da Object) |
ReadCategory() |
Legge tutti i dati relativi ai contatori e alle istanze dell'oggetto delle prestazioni associati a questa categoria di contatori delle prestazioni. |
ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
Si applica a
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: nel corso del 2024 verranno dismessi i problemi di GitHub come meccanismo di feedback per il contenuto e verranno sostituiti con un nuovo sistema di feedback. Per altre informazioni, vedere:Invia e visualizza il feedback per