Contatori di prestazioni in .NET Compact Framework
Aggiornamento: novembre 2007
.NET Compact Framework non supporta gli oggetti PerformanceCounter in quanto non vengono utilizzati in Windows CE e .NET Compact Framework. Tuttavia, .NET Compact Framework include un insieme di contatori di prestazioni predefiniti per l'analisi dei tipi di caricamento dell'applicazione in .NET Compact Framework. I contatori non sono estensibili.
È possibile generare nel dispositivo un file contenente le statistiche sulle prestazioni relative all'applicazione. Per una procedura dettagliata, vedere Procedura: generare statistiche delle prestazioni.
I contatori di prestazioni sono utili per identificare l'impatto della compilazione Garbage Collection e JIT (Just-In-Time) sulle prestazioni dell'applicazione. Da queste statistiche è possibile determinare gli aspetti che è necessario ottimizzare.
Nel file delle statistiche sono elencati i contatori di prestazioni con le colonne riportate di seguito:
Colonna |
Descrizione |
---|---|
Totale |
La somma delle occorrenze. |
Ultimo dato |
Il dato più recente. |
N |
Il numero di occorrenze. |
Media |
Il valore intermedio tra due o più valori. |
Min |
Il valore minimo. |
Max |
Il valore massimo. |
Contatori di .NET Compact Framework
I contatori delle prestazioni sono organizzati nelle seguenti categorie:
Caricatore |
Compilazione JIT |
Generics |
Eccezioni |
Blocchi e thread |
Interoperabilità |
Garbage Collection |
Rete |
Memoria |
Windows Form |
Contatori di caricatori
I contatori riportati di seguito sono relativi alla parte di Common Language Runtime (CLR) responsabile della risoluzione e del caricamento dei componenti a cui viene fatto riferimento dall'applicazione, ad esempio assembly e classi.
Nome e nome breve |
Descrizione |
Tipo contatore |
---|---|---|
Tempo di esecuzione totale del programma (ms) RunTime |
Tempo trascorso dalla chiamata di CLR espresso in millisecondi. |
Calculated |
Domini di applicazione creati napplication domains |
Numero di domini applicazione creati nel processo dell'applicazione. |
Simple |
Domini di applicazione non caricati napplication domainsUnloaded |
Numero di domini applicazione scaricati durante la fase di esecuzione dell'applicazione. |
Simple |
Assembly caricati nAssembliesloaded |
Numero di assembly caricati in tutti i domini applicazione per l'applicazione. |
Simple |
Classi caricate nClassesloaded |
Numero di classi caricate in tutti i domini applicazione durante la fase di esecuzione dell'applicazione. |
Simple |
Metodi caricati nMethodsloaded |
Conteggio totale dei metodi caricati in tutti i domini applicazione durante la fase di esecuzione dell'applicazione. |
Simple |
Contatori di generics
I contatori di generics sono contatori di caricatori specifici della funzionalità generics di .NET Compact Framework, utilizzata internamente da CLR. È possibile pertanto visualizzare valori in questi contatori anche se nell'applicazione non vengono utilizzati generics in modo esplicito.
Nome e nome breve |
Descrizione |
Tipo contatore |
---|---|---|
Tipi chiusi caricati nInstGenericTypesLoaded |
Conteggio dei tipi generici univoci caricati in tutti i domini di applicazione. Un tipo chiuso è una classe generica associata a un tipo di dati specifico. Un'istanza di MyGenericType<Int32> ad esempio è un tipo chiuso. |
Simple |
Tipi chiusi caricati per definizione nMaxClosedTypes |
Numero massimo di tipi generici univoci creati per una determinata definizione in tutti i domini di applicazione. Se ad esempio un'applicazione crea un'istanza di MyGenericType<Int32>, MyGenericType<String> e MyGenericType<Single>, il numero di tipi chiusi caricati per la definizione MyGenericType<T> è tre (3). Un numero elevato (diverse centinaia o oltre) nella colonna Max può indicare un sovraccarico del working set in termini di codice con compilazione JIT e di strutture di dati CLR. |
StaticOnly |
Tipi aperti caricati nOpenTypesLoaded |
Conteggio dei tipi generici aperti creati in tutti i domini di applicazione. Un tipo aperto è una classe generica caricata, ma non associata a un tipo di dati specifico. I tipi aperti vengono in genere creati solo negli scenari di reflection. Il caricamento di un'istanza di MyGenericType<T> tramite reflection ad esempio incrementerà il contatore Tipi aperti caricati. Se viene associato, ad esempio in MyGenericType<String>, il tipo diventa un tipo chiuso e il contatore Tipi chiusi caricati viene incrementato. CLR di .NET Compact Framework utilizza la reflection internamente e può essere l'origine dei tipi aperti. La serializzazione XML e i servizi Web ad esempio utilizzano la reflection internamente. |
Simple |
Metodi chiusi caricati nInstGenericMethodsLoaded |
Conteggio dei metodi generici univoci caricati in tutti i domini di applicazione. Un metodo chiuso è un metodo generico associato a un tipo di dati specifico. Il tipo contenente il metodo può essere o meno un tipo generico. Un'istanza di MyType.ProcessData<Int32>() ad esempio è un metodo chiuso. |
Simple |
Metodi chiusi caricati per definizione nMaxClosedMethods |
Numero massimo di metodi generici univoci creati per una determinata definizione in tutti i domini di applicazione. Questo contatore è molto simile al contatore Tipi chiusi caricati per definizione. Utilizzando le seguenti istanze di MyType.ProcessData<Int32>(), MyType.ProcessData<String>() e MyType.ProcessData<Single>() verranno creati tre metodi chiusi per la definizione MyType.ProcessData<T>(). Analogamente al contatore Tipi chiusi caricati per definizione, un numero elevato (diverse centinaia o oltre) nella colonna Max può indicare un sovraccarico del working set in termini di codice con compilazione JIT e di strutture di dati CLR. |
StaticOnly |
Metodi aperti caricati nOpenMethodsLoaded |
Conteggio dei metodi generici aperti creati in tutti i domini di applicazione. I metodi aperti vengono in genere creati solo negli scenari di reflection. Un metodo aperto è un metodo generico caricato, ma non associato a un tipo specifico. Il runtime di .NET Compact Framework utilizza la reflection internamente e può essere l'origine dei metodi aperti. |
Simple |
Contatori di blocchi e thread
I seguenti contatori riguardano il threading, i blocchi, i timer e i pool di thread. Questi contatori consentono di identificare problemi di prestazioni relativi al threading fornendo dati sull'utilizzo di blocchi, thread e timer durante la fase di esecuzione dell'applicazione.
Nome e nome breve |
Descrizione |
Tipo contatore |
---|---|---|
Thread nel pool di thread nThreads |
Numero di thread attualmente nel pool di thread. Questo contatore conta i thread avviati utilizzando il metodo QueueUserWorkItem. Il contatore non include i thread avviati utilizzando il metodo Start. |
MinMax |
Timer in sospeso nPendingTimers |
Numero di timer attualmente in coda. |
MinMax |
Timer programmati nTimersStarted |
Numero di timer attualmente in esecuzione o programmati per l'esecuzione. |
Simple |
Timer ritardati dal limite del pool di thread nTimersDelayed |
Conteggio dei timer ritardati dal limite del pool di thread. |
Simple |
Elementi di lavoro in coda nWorkItemsQueued |
Conteggio degli elementi di lavoro in coda nel pool di thread. |
Simple |
Chiamate Monitor.Enter non contestate nUncontestedMonitor |
Conteggio delle chiamate effettuate al metodo Enter non contestate. |
Simple |
Chiamate Monitor.Enter contestate nContestedMonitor |
Conteggio delle chiamate effettuate a Enter contestate. Se nelle applicazioni multithreading Thread1 controlla un blocco e Thread2 necessita di accedere a codice protetto dal blocco, il contatore Chiamate Monitor.Enter contestate viene incrementato. |
Simple |
Contatori di Garbage Collection
I seguenti contatori riguardano le operazioni di Garbage Collection.
Nome e nome breve |
Descrizione |
Tipo contatore |
---|---|---|
Numero massimo byte allocati (nativi + gestiti) cbPeakMemUsage |
Numero massimo di byte utilizzati da CLR, inclusa la memoria nativa e gestita. |
Calculated |
Oggetti gestiti allocati nObjectsAllocated |
Conteggio degli oggetti allocati dal Garbage Collector. |
Simple |
Oggetti gestiti non utilizzati allocati nObjectsAllocatedNotUsed |
Conteggio degli oggetti allocati che non sono mai stati utilizzati. |
Simple |
Byte gestiti allocati cbAllocated |
Conteggio dei byte allocati dal Garbage Collector. |
Complex |
Byte gestiti non utilizzati allocati cbAllocatedNotUsed |
Conteggio dei byte allocati che non sono mai stati utilizzati. |
Complex |
Oggetti stringa gestiti allocati nStrings |
Numero di oggetti stringa gestiti allocati dal Garbage Collector. |
Simple |
Byte di oggetti stringa allocati nStringBytes |
Conteggio dei byte di oggetti stringa allocati dal Garbage Collector. |
Simple |
Garbage Collection (GC) nGC |
Numero di esecuzioni del Garbage Collector. |
Simple |
Byte raccolti da GC cbGarbage |
Conteggio dei byte raccolti dal Garbage Collector. |
Complex |
Byte gestiti utilizzati dopo GC cbLive |
Numero di byte allocati agli oggetti attivi dopo l'ultima procedura di Garbage Collection. |
MinMax |
Numero totale di byte utilizzati dopo GC cbWorkingSetMem |
Numero di byte di memoria, nativa e gestita, in uso dopo l'ultima procedura di Garbage Collection. |
MinMax |
Compattazioni GC nCompactions |
Numero di compattazioni dell'heap tramite Garbage Collector. |
Simple |
Pitching codice nPitches |
Numero di eliminazioni del codice con compilazione JIT tramite Garbage Collector. |
Simple |
Chiamate a GC.Collect nInduced |
Numero di chiamate al metodo Collect da parte dell'applicazione. |
Simple |
Tempo di latenza GC (ms) msLatency |
Tempo totale, in millisecondi, impiegato dal Garbage Collector per raccogliere gli oggetti e compattare l'heap. Nel tempo di latenza del Garbage Collector sono inclusi il tempo per la raccolta di oggetti gestiti non più compresi nell'ambito e il tempo di compattazione dell'heap del Garbage Collector, se richiesto. |
Complex |
Oggetti bloccati nPinned |
Conteggio degli oggetti bloccati rilevati durante una procedura di Garbage Collection. Gli oggetti bloccati sono oggetti i cui percorsi in memoria non possono cambiare. Un buffer di memoria utilizzato per le comunicazioni tra codice gestito e codice non gestito ad esempio è un oggetto bloccato. Gli oggetti bloccati non possono essere spostati dal Garbage Collector durante la compattazione dell'heap. |
Simple |
Oggetti spostati dal compattatore nObjMoved |
Conteggio degli oggetti spostati dal Garbage Collector durante una compattazione. |
Simple |
Oggetti non spostati dal compattatore nObjNotMoved |
Conteggio degli oggetti che non sono stati spostati dal Garbage Collector durante una compattazione. Gli oggetti non vengono spostati per diversi motivi. Alcuni oggetti non possono essere spostati, ma si tratta di casi rari. Altri oggetti non vengono spostati perché sono contenuti in una parte dell'heap che non deve essere compattata. |
Simple |
Oggetti finalizzati nFinalizersRun |
Conteggio degli oggetti per cui è stato eseguito un finalizzatore. |
Simple |
Tipi valore boxed nBoxes |
Numero di tipi valore sottoposti a boxing. |
Simple |
Contatori di memoria
I seguenti contatori riguardano gli heap di memoria gestiti dal Garbage Collector.
Nome e nome breve |
Descrizione |
Tipo contatore |
---|---|---|
Heap processi HeapDefault |
Numero di byte attualmente utilizzati dall'heap predefinito di CLR. In Heap processi è contenuta la memoria allocata da CLR che non rientra negli altri heap elencati in questa tabella. |
MinMax |
Heap a breve termine HeapShortTerm |
Numero di byte attualmente utilizzati dall'heap a breve termine di CLR. In Heap a breve termine è contenuta la memoria allocata da CLR per un utilizzo temporaneo. |
MinMax |
Heap JIT HeapJitCodeBuffer |
Numero di byte utilizzati dall'heap del compilatore JIT. In Heap JIT è contenuto il codice nativo generato quando il compilatore JIT di .NET Compact Framework compila un metodo gestito. La compilazione JIT viene effettuata la prima volta in cui viene eseguito un metodo gestito oppure la prima volta in cui viene eseguito un metodo dopo che il codice è stato eliminato. |
MinMax |
Heap domini applicazione HeapAppDomain |
Numero di byte utilizzati dall'heap domini applicazioni di CLR. In Heap domini applicazione è contenuta la rappresentazione dinamica di metadati utilizzata dal caricatore di assembly di CLR. |
MinMax |
Heap GC HeapGC |
Numero di byte utilizzati dall'heap del Garbage Collector. In Heap GC è contenuta la memoria allocata da applicazioni e .NET Compact Framework. |
MinMax |
Contatori della compilazione JIT
I seguenti contatori riguardano le operazioni del compilatore JIT.
Nome e nome breve |
Descrizione |
Tipo contatore |
---|---|---|
Byte nativi compilati JIT cbJittedNative |
Conteggio dei byte del codice nativo generato dal compilatore JIT. |
Complex |
Metodi compilati JIT nMethodsJitted |
Conteggio dei metodi generati dal compilatore JIT. |
Simple |
Byte con pitch cbPitched |
Conteggio dei byte del codice nativo generato dal compilatore JIT eliminati. |
Complex |
Metodi con pitch nMethodsPitched |
Conteggio dei metodi generati dal compilatore JIT eliminati. A meno che l'applicazione non sia stata spostata in background durante la fase di esecuzione, tutti i valori positivi del contatore Metodi con pitch indicano che l'applicazione è stata eseguita con stress della memoria. |
Simple |
Tempo di latenza del pitch del metodo (ms) msPitchLatency |
Tempo totale, in millisecondi, impiegato per eliminare i metodi generati dal compilatore JIT. |
Complex |
Contatori di eccezioni
I seguenti contatori riguardano le eccezioni.
Nome e nome breve |
Descrizione |
---|---|
Eccezioni generate nExceptions |
Conteggio delle eccezioni gestite che sono state generate. Poiché per generare un'eccezione vengono utilizzate molte risorse, la registrazione del numero di eccezioni generate dall'applicazione consente di identificare eventuali problemi di progettazione. |
Contatori di interoperabilità
I seguenti contatori riguardano l'interoperabilità con il codice nativo.
Nome e nome breve |
Descrizione |
Tipo contatore |
---|---|---|
Chiamate di richiamo piattaforma nPInvoke |
Conteggio delle chiamate di richiamo piattaforma dal codice gestito al codice nativo, escluse le chiamate di richiamo piattaforma CLR interne. |
Simple |
Chiamate COM tramite vtable nComVTable |
Conteggio delle chiamate dal codice gestito al codice nativo tramite il metodo vtable di interoperabilità COM. |
Simple |
Chiamate COM tramite IDispatch nComIDispatch |
Conteggio delle chiamate dal codice gestito al codice nativo tramite il metodo IDispatch di interoperabilità COM. |
Simple |
Marshalling complesso nMarshal |
Numero di oggetti sottoposti a marshalling dal codice gestito al codice nativo che ha comportato la copia o la trasformazione dei dati. |
Simple |
Runtime Callable Wrapper cTotalRcw |
Conteggio totale dei Runtime Callable Wrapper COM creati. I Runtime Callable Wrapper vengono creati quando il codice gestito eseguito nel runtime di .NET Compact Framework effettua una chiamata a un oggetto COM non gestito. |
Simple |
Contatori di rete
I seguenti contatori riguardano le operazioni di invio e ricezione in rete.
Nome e nome breve |
Descrizione |
Tipo contatore |
---|---|---|
Byte Socket inviati nBytesSent |
Conteggio totale dei byte inviati tramite socket. |
Simple |
Byte Socket ricevuti nBytesReceived |
Conteggio totale dei byte ricevuti tramite socket. |
Simple |
Contatori di Windows Form
I seguenti contatori riguardano lo spazio dei nomi System.Windows.Forms.
Nome e nome breve |
Descrizione |
Tipo contatore |
---|---|---|
Controlli creati nControlsCreated |
Numero totale di controlli creati dall'applicazione. |
Simple |
Pennelli creati nBrushesCreated |
Numero totale di oggetti pennello creati dall'applicazione. |
Simple |
Penne create nPensCreated |
Numero totale di oggetti penna creati dall'applicazione. |
Simple |
Bitmap create nBitmapsCreated |
Numero totale di oggetti bitmap creati dall'applicazione. |
Simple |
Aree create nRegionsCreated |
Numero totale di oggetti area creati dall'applicazione. |
Simple |
Tipi di carattere creati nFontsCreated |
Numero totale di oggetti tipo di carattere creati dall'applicazione. |
Simple |
Immagini create (FromImage) nGraphicsFromImage |
Numero totale di oggetti grafici creati dal metodo FromImage. |
Simple |
Immagini create (CreateGraphics) nGraphicsCreateGraphics |
Numero totale di oggetti grafici creati dal metodo CreateGraphics. |
Simple |
Vedere anche
Attività
Procedura: generare statistiche delle prestazioni