Condividi tramite


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

Altre risorse

Prestazioni e diagnostica in .NET Compact Framework