Analizzare l'utilizzo della memoria usando lo strumento di allocazione di oggetti .NET
È possibile visualizzare la quantità di memoria usata dall'app e i percorsi di codice che allocano la maggior parte della memoria usando lo strumento di allocazione di oggetti .NET.
Dopo aver eseguito lo strumento, è possibile visualizzare i percorsi di esecuzione della funzione in cui vengono allocati gli oggetti. È quindi possibile tornare alla radice dell'albero delle chiamate che occupa la maggior parte della memoria.
Per un'esercitazione che illustra come migliorare le prestazioni usando lo strumento di allocazione di oggetti .NET, vedere Case study: Beginner's guide to optimizing code.
Configurazione
Selezionare ALT+F2 per aprire il Profiler prestazioni in Visual Studio.
Selezionare la casella di controllo per il rilevamento dell'allocazione degli oggetti .NET.
Selezionare il pulsante Start per eseguire lo strumento.
Se si abilita l'opzione Avvia con raccolta sospesa prima di avviare il profiler, i dati non verranno raccolti finché non si seleziona il pulsante Record nella visualizzazione sessione di diagnostica.
Dopo l'avvio dello strumento, attraversa lo scenario che desideri profilare nell'app. Selezionare quindi Arresta raccolta o chiudere l'app per visualizzare i dati.
Selezionare la scheda allocazione. I dati di allocazione della memoria simili ai seguenti vengono visualizzati.
È ora possibile analizzare l'allocazione di memoria degli oggetti.
Durante la raccolta, lo strumento di rilevamento può rallentare l'app profilata. Se le prestazioni dello strumento di rilevamento o dell'app sono lente e se non è necessario tenere traccia di ogni oggetto, è possibile modificare la frequenza di campionamento. Per fare ciò, selezionare l'icona dell'ingranaggio accanto allo strumento di monitoraggio nella pagina di riepilogo del profiler.
Regolare la frequenza di campionamento in base alla frequenza desiderata. Questa modifica consente di velocizzare le prestazioni dell'app durante la raccolta e l'analisi.
Per altre informazioni su come rendere lo strumento più efficiente, vedere Ottimizzazione delle impostazioni del profiler.
Comprendere i tuoi dati
Nella visualizzazione grafica seguente il grafico superiore mostra il numero di oggetti attivi nell'app. Il grafico inferiore delta oggetto mostra la variazione percentuale degli oggetti dell'app. Le barre rosse indicano quando è stata eseguita la Garbage Collection.
È possibile filtrare i dati tabulari per visualizzare l'attività solo per un intervallo di tempo specificato selezionando un intervallo di tempo. Quando si esegue questa operazione, le informazioni visualizzate nelle schede hanno come ambito l'intervallo di tempo filtrato.
È anche possibile eseguire lo zoom avanti o indietro del grafico.
Allocazione
La visualizzazione Allocazione mostra la posizione degli oggetti che stanno allocando memoria e quanta memoria stanno allocando.
Le seguenti informazioni sono visualizzate nella visualizzazione Allocazione .
La colonna Tipo è un elenco di classi e strutture che occupano memoria. Fare doppio clic su un tipo per visualizzarne il backtrace come albero delle chiamate invertito. Nella visualizzazione allocazione solo, è possibile visualizzare gli elementi all'interno della categoria selezionata che consumano memoria.
La colonna allocazioni mostra il numero di oggetti che occupano memoria all'interno di un particolare tipo o funzione di allocazione. Questa colonna viene visualizzata solo nelle viste Allocation, Call Treee Functions.
Le colonne byte e dimensioni medie (byte) non vengono visualizzate per impostazione predefinita. Per visualizzarli, fare clic con il pulsante destro del mouse sulla colonna Tipo o Allocazioni, quindi selezionare le opzioni Byte e Dimensioni Medie (Byte) per aggiungerle al grafico.
Le due colonne sono simili a totale (allocazioni) e self (allocazioni), ad eccezione del fatto che mostrano la quantità di memoria impiegato anziché il numero di oggetti che occupano memoria. Queste colonne vengono visualizzate solo nella visualizzazione allocazione.
La colonna Nome modulo mostra il modulo che contiene la funzione o il processo che sta chiamando.
Tutte queste colonne sono ordinabili. Per le colonne Type e Module Name, è possibile ordinare gli elementi in ordine alfabetico in ordine crescente o decrescente. Per le allocazioni , Byte e Dimensioni medie (Byte), è possibile ordinare gli elementi per valore numerico crescente o decrescente.
Simboli
I simboli seguenti vengono visualizzati nelle schede Allocation, Call Treee Functions:
- Tipo di valore come intero
- Raccolta di tipi di valore, ad esempio matrice di numeri interi
- Il tipo di riferimento come stringa
- Raccolta di tipi di riferimento come matrice di stringhe
Albero delle chiamate
La vista albero delle chiamate mostra i percorsi di esecuzione delle funzioni che contengono oggetti con un alto consumo di memoria.
Le seguenti informazioni appaiono nella vista albero delle chiamate:
- La colonna Nome Funzione mostra il processo o il nome della funzione contenente oggetti che allocano memoria. La visualizzazione si basa sul livello del nodo che si sta esaminando.
- Le colonne Totale (Allocazioni) e le colonne Dimensioni totali (byte) mostrano il numero di oggetti allocati e la quantità di memoria usata da una funzione e da tutte le altre funzioni chiamate. La colonna dimensioni totali (byte) è nascosta per impostazione predefinita.
- Le colonne Self (Allocazioni) e Self-Size (Byte) mostrano il numero di oggetti allocati e la quantità di memoria utilizzata da una singola funzione o tipo di allocazione selezionato.
- Nella colonna Dimensioni medie (byte) vengono visualizzate le stesse informazioni presenti nella Visualizzazione Allocazioni. Questa colonna è nascosta per impostazione predefinita.
- La colonna Nome modulo mostra il modulo che contiene la funzione o il processo che sta chiamando.
Le opzioni aggiuntive che appaiono nella vista dell'albero delle chiamate includono:
- Il pulsante Espandi Percorso Critico evidenzia un percorso di esecuzione della funzione che contiene molti oggetti che allocano memoria. L'algoritmo inizia in corrispondenza di un nodo selezionato ed evidenzia il percorso delle allocazioni più frequenti, guidando l'utente nell'indagine.
- Il pulsante Mostra percorso critico mostra o nasconde i simboli di fiamma che indicano quali nodi fanno parte del percorso critico.
Funzioni
La visualizzazione Funzioni mostra processi, moduli e funzioni che allocano memoria.
Le informazioni che appaiono nella vista Funzioni includono:
La colonna Nome mostra i processi come nodi al livello più alto. I processi sottostanti sono moduli e sotto i moduli sono funzioni.
Le seguenti colonne, che mostrano le stesse informazioni presenti nelle viste allocazione e albero delle chiamate:
- Totali (allocazioni)
- self (allocazioni)
- Dimensioni Totali (byte)
- Dimensione Self (Byte)
- dimensioni medie (byte)
Collezione
La visualizzazione della raccolta mostra il numero di oggetti raccolti o conservati durante l'operazione di raccolta dei rifiuti.
Le seguenti informazioni compaiono nella vista della collezione .
- La colonna GC mostra l'ID di questa raccolta dei rifiuti nel ciclo di vita dell'eseguibile.
- Nella colonna Generazione viene visualizzata la generazione dell'operazione di Garbage Collection.
- La colonna tipo GC mostra il tipo di garbage collection.
- La colonna GC Reason mostra il motivo di questo evento di Garbage Collection.
- La colonna Durata pausa indica l'ora in cui l'esecuzione è stata bloccata perché il Garbage Collector richiede l'uso esclusivo dell'heap. Per un'operazione di Garbage Collection in background, questo valore è ridotto.
- La colonna dimensioni LOH mostra le dimensioni dell'Heap Oggetti di Grandi Dimensioni dopo l'esecuzione di Garbage Collector.
- La colonna dimensione POH mostra la dimensione dell'Heap degli Oggetti Bloccati dopo l'esecuzione del Garbage Collector.
- La colonna Finalizable Surv (MB) mostra il numero di MB di oggetti con finalizzatori (distruttori) che sono sopravvissuti alla raccolta dei rifiuti.
- La colonna Oggetti Fissati mostra il numero di oggetti fissati promossi dalla raccolta dei rifiuti.
- La colonna Raccolta mostra il numero di oggetti che il raccoglitore di rifiuti ha raccolto.
- La colonna Survived mostra il numero di oggetti sopravvissuti dopo l'esecuzione del Garbage Collector.
Quando si seleziona una riga, questa vista mostra anche grafici a torta per visualizzare gli oggetti raccolti e sopravvissuti in base alla tipologia.
Strumenti di filtro
Le visualizzazioni Allocations, Call Tree, e Functions contengono tutte le opzioni Show Just My Code e Show Native Code e una casella di filtro.
- Show Just My Code comprime sistemi, framework e altro codice non utente in [codice esterno] frame in modo da potersi concentrare solo sul codice. Per ulteriori informazioni, vedere Eseguire il debug del codice utente con "Just My Code".
- Mostra codice nativo mostra il codice nativo all'interno della destinazione di analisi e può includere codice non utente.
- Con la casella di filtro, è possibile filtrare la colonna Nome o Nome funzione in base al valore specificato. Immettere un valore stringa nella casella. La tabella mostra quindi solo i tipi che contengono tale stringa.