Condividi tramite


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 Guida per principianti all'ottimizzazione del codice.

Attrezzaggio

  1. Selezionare ALT+F2 per aprire Il profiler prestazioni in Visual Studio.

  2. Selezionare la casella di controllo Rilevamento allocazione oggetti .NET.

    Screenshot dello strumento Dotnet Object Allocation Tracking selezionato.

    Screenshot dello strumento Dotnet Object Allocation Tracking selezionato.

  3. 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 Registra nella visualizzazione sessione di diagnostica.

  4. Dopo l'avvio dell'esecuzione dello strumento, esaminare lo scenario che si vuole profilare nell'app. Selezionare quindi Interrompi raccolta o chiudi l'app per visualizzare i dati.

    Screenshot della finestra che mostra Arresta raccolta.

    Screenshot della finestra che mostra Arresta raccolta.

  5. Selezionare la scheda Allocazione. Verrà visualizzata la scheda Allocazione di memoria simile alla seguente.

    Screenshot della scheda Allocazione.

    Screenshot della scheda Allocazione.

È 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. A tale scopo, selezionare il simbolo dell'ingranaggio accanto allo strumento di rilevamento nella pagina di riepilogo del profiler.

Screenshot delle impostazioni per lo strumento di allocazione Dotnet.

Screenshot delle impostazioni per lo strumento di allocazione Dotnet.

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.

Screenshot di una frequenza di campionamento modificata.

Screenshot di una frequenza di campionamento modificata.

Per altre informazioni su come rendere lo strumento più efficiente, vedere Ottimizzazione delle impostazioni del profiler.

Informazioni sui dati

Nella visualizzazione grafica seguente il grafico superiore mostra il numero di oggetti attivi nell'app. Il grafico delta dell'oggetto inferiore mostra la variazione percentuale degli oggetti dell'app. Le barre rosse indicano quando è stata eseguita la Garbage Collection.

Screenshot del grafico per lo strumento di allocazione Dotnet.

Screenshot del grafico per lo strumento di allocazione Dotnet.

È 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.

Screenshot del grafico filtrato del tempo di allocazione dotnet.

Screenshot del grafico filtrato del tempo di allocazione dotnet.

È anche possibile eseguire lo zoom avanti o indietro del grafico.

Allocazione

La visualizzazione Allocazione mostra la posizione degli oggetti che allocano la memoria e la quantità di memoria allocata di tali oggetti.

Screenshot della visualizzazione Allocazione espansa.

Screenshot della visualizzazione Allocazione espansa.

Le informazioni seguenti sono visualizzate nella visualizzazione Allocazione :

  • La colonna Type è 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 è possibile visualizzare solo gli elementi all'interno della categoria selezionata che occupano 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 visualizzazioni Allocazione, Albero delle chiamate e Funzioni .

  • 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 e 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 della quantità di memoria impiegato invece del numero di oggetti che occupa 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 Tipo e Nome modulo, è possibile ordinare gli elementi in ordine alfabetico in ordine crescente o decrescente. Per Allocazioni, byte e dimensioni medie (byte), è possibile ordinare gli elementi aumentando o riducendo il valore numerico.

Simboli

I simboli seguenti vengono visualizzati nelle schede Allocazione, Albero delle chiamate e Funzioni :

  • Simbolo del tipo di valore - Tipo di valore come integer

  • Simbolo della raccolta di tipi di valore - Raccolta di tipi valore, ad esempio matrice di numeri interi

  • Simbolo del tipo di riferimento - Tipo di riferimento come string

  • Simbolo della raccolta di tipi di riferimento - Raccolta di tipi di riferimento come matrice di stringhe

Albero delle chiamate

La visualizzazione Albero delle chiamate mostra i percorsi di esecuzione della funzione che contengono oggetti che allocano molta memoria.

Screenshot della visualizzazione Albero delle chiamate.

Screenshot della visualizzazione Albero delle chiamate.

Le informazioni seguenti sono visualizzate nella visualizzazione 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 Total (Allocations) e Total Size (Bytes) 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 (Allocations) e Self-Size (Bytes) mostrano il numero di oggetti allocati e la quantità di memoria usata da una singola funzione o tipo di allocazione selezionato.
  • La colonna Dimensioni medie (byte) mostra le stesse informazioni della 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 visualizzate nella visualizzazione 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 attivo.

Screenshot del percorso ad accesso frequente espanso.

Screenshot del percorso ad accesso frequente espanso.

Funzioni

La visualizzazione Funzioni mostra processi, moduli e funzioni che allocano la memoria.

Screenshot della visualizzazione Funzioni.

Screenshot della visualizzazione Funzioni.

Le informazioni visualizzate nella visualizzazione Funzioni includono:

  • La colonna Nome mostra i processi come nodi di livello più alto. I processi sottostanti sono moduli e sotto i moduli sono funzioni.

  • Le colonne seguenti, che mostrano le stesse informazioni delle visualizzazioni Allocazione e Chiamata ad albero :

    • Totale (allocazioni)
    • Self (allocazioni)
    • Dimensioni totali (byte)
    • Dimensioni self (byte)
    • Dimensioni medie (byte)

Raccolta

La visualizzazione Raccolta mostra il numero di oggetti raccolti o conservati durante l'operazione di Garbage Collection.

Screenshot della visualizzazione Raccolta.

Screenshot della visualizzazione Raccolta.

Nella visualizzazione Raccolta sono visualizzate le informazioni seguenti.

  • La colonna GC mostra l'ID di questa Garbage Collection nel ciclo di vita dell'eseguibile.
  • La colonna Generazione mostra 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 mostra 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 LOH Size mostra le dimensioni dell'heap large object dopo l'esecuzione del Garbage Collector.
  • La colonna Dimensioni POH mostra le dimensioni dell'heap dell'oggetto aggiunto 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 Garbage Collection.
  • La colonna Oggetti aggiunti mostra il numero di oggetti aggiunti promossi da Garbage Collection.
  • La colonna Raccolta mostra il numero di oggetti raccolti dal Garbage Collector.
  • La colonna Survived mostra il numero di oggetti sopravvissuti dopo l'esecuzione del Garbage Collector.

Quando si seleziona una riga, questa visualizzazione mostra anche grafici a torta per visualizzare gli oggetti raccolti e sopravvissuti in base al tipo.

Screenshot dei grafici a torta nella visualizzazione Raccolta.

Strumenti di filtro

Le visualizzazioni Allocazioni, Albero delle chiamate e Funzioni contengono tutte le opzioni Mostra codice personale e Mostra codice nativo e una casella di filtro.

  • Mostra Just My Code comprime sistemi, framework e altro codice non utente in frame [Codice esterno] in modo che sia possibile concentrarsi solo sul codice. Per altre 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.