Condividi tramite


DA0024: Tempo CPU GC elevato

ID regola

DA0023

Categoria

Utilizzo di .NET Framework

Metodo di profilatura

Tutti

Messaggio

% tempo in GC elevata. Indica un sovraccarico di Garbage Collection che potrebbe incidere sulla velocità di risposta dell'applicazione. Per ulteriori dettagli, è possibile raccogliere dati sull'allocazione di memoria .NET e informazioni sulla durata degli oggetti per comprendere il criterio di allocazione della memoria utilizzata dall'applicazione.

Tipo regola

Informativa

Quando si esegue la profilatura tramite i metodi di campionamento, memoria .NET o conflitto di risorse, è necessario raccogliere almeno 10 campioni per attivare questa regola.

Causa

I dati relativi alle prestazioni del sistema raccolti durante la profilatura indicano che la quantità di tempo impiegato nell'operazione di Garbage Collection è significativa rispetto al tempo di elaborazione totale dell'applicazione.

Descrizione della regola

Microsoft .NET Common Language Runtime (CLR) fornisce un meccaniscmo di gestione automatica della memoria che utilizza un Garbage Collector per recuperare memoria da oggetti che non vengono più utilizzati dall'applicazione. Il Garbage Collector è orientato alla generazione, basandosi sull'ipotesi che molte allocazioni sono di breve durata. Le variabili locali, ad esempio, dovrebbero essere di breve durata. Gli oggetti appena creati vengono avviati in generazione 0 (gen 0), quindi avanzano a generazione 1 se vengono conservati dopo l'esecuzione di un'operazione di Garbage Collection e infine passano a generazione 2 se sono ancora utilizzati dall'applicazione.

Gli oggetti in generazione 0 vengono raccolti frequentemente e in genere in modo molto efficace. Gli oggetti in generazione 1 vengono raccolti meno frequentemente e in modo meno efficace. Infine, gli oggetti di lunga durata in generazione 2 dovrebbero essere raccolti con una frequenza ancora inferiore. La raccolta in generazione 2, che è l'esecuzione di un'operazione di Garbage Collection completa, è anche l'operazione più costosa.

Questa regola viene attivata quando la quantità di tempo impiegata per l'operazione di Garbage Collection è significativa rispetto al tempo totale di elaborazione dell'applicazione.

Nota

Quando la percentuale di tempo impiegato per l'operazione di Garbage Collection è eccessiva rispetto al tempo totale di elaborazione dell'applicazione, al posto di questa regola viene generato l'avviso DA0024: Tempo CPU GC eccessivo.

Come esaminare un avviso

Fare doppio clic sul messaggio nella finestra Elenco errori per passare alla Visualizzazione Contrassegni dei dati di profilatura. Individuare la colonna Memoria CLR .NET\Percentuale tempo in GC. Determinare se sono presenti fasi specifiche di esecuzione del programma in cui il sovraccarico di Garbage Collection della memoria gestita è più elevato rispetto ad altre fasi. Confrontare i valori dei dati di Percentuale tempo in GC con la frequenza di Garbage Collection indicata nei valori Raccolte di generazione 0, Raccolte di generazione 1, Raccolte di generazione 2.

Il valore di Percentuale tempo in GC indicare la quantità di tempo impiegato da un'applicazione per l'esecuzione dell'operazione di Garbage Collection proporzionalmente alla quantità di elaborazione totale. Si tenga presente che in alcune circostanze il valore di Percentuale tempo in GC può risultare molto elevato, ma non a causa del sovraccarico di Garbage Collection. Per ulteriori informazioni sulla modalità di calcolo del valore di Percentuale tempo in GC, vedere l'argomento Differenza tra i dati delle prestazioni segnalati da strumenti diversi – 4 nella pagina Maoni's Weblog su MSDN (la pagina potrebbe essere in inglese). Se si verificano errori di pagina o se l'applicazione viene superata da altre operazioni con priorità più elevata eseguite sul computer durante l'operazione di Garbage Collection, il contatore Percentuale tempo in GC rifletterà tali ritardi aggiuntivi.