Condividi tramite


Analizzare l'uso della memoria delle app dello Store (VB, C#, C++)

In Visual Studio 2013 Update 2 puoi usare lo strumento Utilizzo memoria disponibile nell'hub Prestazioni e diagnostica per analizzare l'uso della memoria da parte delle app Windows Runtime scritte in C#, Visual Basic o C++ e XAML. In particolare, ecco cosa puoi fare:

  • Monitorare l'uso della memoria delle tue app direttamente in Visual Studio mentre sviluppi uno scenario. A questo scopo, non devi usare strumenti di sistema e di terze parti.

  • Creare snapshot dettagliati dello stato della memoria della tua app con un solo clic.

  • Confrontare snapshot per trovare la causa principale di problemi di memoria minimi o complessi.

Nota

Questo argomento descrive come usare lo strumento Utilizzo memoria per analizzare app C# e Visual Basic.

L'hub Prestazioni e diagnostica offre molte opzioni per eseguire e gestire una sessione di diagnostica.Ad esempio, puoi eseguire lo strumento Utilizzo CPU sulle app Windows Phone o le app Windows Store oppure condurre una sessione di diagnostica sul computer Visual Studio, su un dispositivo Windows Phone o Windows Store o in uno degli emulatori o simulatori di Visual Studio.Vedere Eseguire strumenti di analisi dalla pagina Prestazioni e diagnostica.

Se vuoi analizzare l'uso della memoria nelle app Windows Store che usano JavaScript e HTML, vedi Analizzare l'utilizzo della memoria (JavaScript).

Per ulteriori informazioni sullo strumento Utilizzo di memoria, incluso come analizzare app C++ e C++/Cx, vedi Diagnostica dei problemi di memoria con il nuovo strumento Utilizzo memoria in Visual Studio nel blog Microsoft Application Lifecycle Management.

Avviare una sessione di diagnostica con lo strumento Utilizzo memoria

  1. Apri il progetto in Visual Studio.

  2. Sulla barra dei menu scegli Debug, Prestazioni e diagnostica.

  3. Nella pagina hub Prestazioni e diagnostica seleziona Utilizzo memoria e poi scegli il pulsante Avvia.

    Avviare una sessione diagnostica di Utilizzo memoria

Scegliere la modalità di profilatura

Potresti dover testare un componente nativo insieme all'app gestita che costituisce il progetto di avvio. Oppure l'app gestita è solo un test harness e ti interessa solo la memoria nativa. Ancora, potresti voler individuare la relazione tra la tua app gestita e Windows Runtime. In situazioni come queste, scegli Impostazioni e poi seleziona la lingua o le lingue di destinazione.

Selezione dei linguaggi di programmazione

Monitorare l'uso della memoria

Oltre a usare lo strumento Utilizzo memoria per generare report dettagli con cui trovare e correggere errori, puoi usarlo anche per studiare gli effetti in tempo reale sulla memoria in uno scenario che stai sviluppando attivamente.

Quando avvii una sessione di diagnostica, l'app viene avviata e nella pagina hub Prestazioni e diagnostica viene visualizzato un grafico della sequenza temporale dell'uso della memoria della tua app.

Monitorare l'uso della memoria

Durante l'esecuzione dell'app, puoi provare nuove funzionalità o studiare gli scenari in cui potrebbe presentarsi un problema. Il grafico della sequenza temporale dello strumento Utilizzo memoria mostra le fluttuazioni nella memoria dell'app durante la sua esecuzione.

Eventuali picchi nel grafico in genere indicano che una routine nell'app sta raccogliendo o creando dati, per poi rimuoverli al termine del processo. Picchi significativi indicano metodi che potresti riuscire a ottimizzare. Più preoccupante sarebbe un aumento del consumo di memoria che non torna ai valori normali, perché può indicare un uso della memoria non efficiente o addirittura una perdita di memoria.

Chiudere una sessione di monitoraggio

Arrestare la raccolta

Per arrestare una sessione di monitoraggio senza creare un report, chiudi semplicemente la finestra di diagnostica. Per generare un report dopo aver creato snapshot della memoria, scegli Arresta.

Creare snapshot per analizzare lo stato della memoria dell'app

Se riscontri un problema di memoria su cui vuoi indagare, puoi creare alcuni snapshot durante la sessione di diagnostica per acquisire oggetti di memoria in determinati momenti. Dato che un'app usa un gran numero di tipi di oggetti, potresti voler concentrare la tua analisi su un solo scenario. È anche una buona idea acquisire uno snapshot di base dell'app prima che si verifichi un problema di memoria, un altro dopo che il problema si presenta per la prima volta e uno o più snapshot aggiuntivi se puoi ripetere lo scenario.

Per raccogliere snapshot, avvia una nuova sessione di diagnostica. Scegli Crea snapshot quando vuoi acquisire i dati di memoria. Per generare un report, scegli Arresta.

Pagina delle informazioni generali dello strumento Utilizzo memoria

Una volta completata la raccolta dei dati, lo strumento Utilizzo memoria arresta l'app e visualizza un report con informazioni generali.

Pagina di panoramica Utilizzo memoria

Viste degli snapshot dello strumento Utilizzo memoria

Usa le viste degli snapshot per aprire report dettagli in nuove finestre di Visual Studio. Esistono due tipi di viste degli snapshot:

Collegamenti della visualizzazione Snapshot

Gli elementi numerati nell'immagine della vista dello snapshot sono link che aprono viste di report di Utilizzo memoria.

Passaggio 1

Il testo del link indica il numero totale di byte in memoria quando è stato creato lo snapshot.

Scegli questo link per visualizzare un report dettagli dello snapshot, ordinato in base alla dimensione totale delle istanze di tipo.

Passaggio 2

Il testo del link indica il numero totale di oggetti in memoria quando è stato creato lo snapshot.

Scegli questo link per visualizzare un report dettagli dello snapshot, ordinato in base al numero di istanze dei tipi.

Passaggio 3

Il testo del link indica la differenza tra la dimensione totale degli oggetti in memoria al momento dello snapshot e la dimensione totale dello snapshot precedente.

Il testo del link è un numero positivo quando la dimensione della memoria dello snapshot è maggiore rispetto allo snapshot precedente e un numero negativo quando la dimensione è minore. Il testo del link Alla linea di base indica che lo snapshot è il primo della sessione di diagnostica, mentre il testo Nessuna differenza indica che la differenza è zero.

Scegli questo link per visualizzare un report delle differenze degli snapshot, ordinato in base alla differenza riguardo alla dimensione totale delle istanze dei tipi.

Passaggio 4

Il testo del link mostra la differenza tra il numero totale di oggetti di memoria nello snapshot e il numero di oggetti nello snapshot precedente.

Scegli questo link per visualizzare un report delle differenze degli snapshot, ordinato in base alla differenza riguardo al numero totale di istanze dei tipi.

Report degli snapshot

Report snapshot Utilizzo memoria

Alberi dei report degli snapshot

Heap gestito

L'albero dell'heap gestito Albero Heap gestito (dettagli snapshot) e l'Albero Heap gestito (differenze tra snapshot) mostrano i tipi e le istanze presenti nel report. Se selezioni un tipo o un'istanza, vengono visualizzati gli alberi Percorsi della radice e Oggetti a cui si fa riferimento per l'elemento selezionato.

Percorsi della radice

L'Albero Percorsi della radice (dettagli snapshot) e l'Albero Percorsi della radice (differenze tra snapshot) mostrano la catena di oggetti che fanno riferimento al tipo o all'istanza. Garbage Collector di .NET Framework pulisce la memoria per un oggetto solo una volta rilasciati tutti i riferimenti.

Oggetti a cui si fa riferimento

L'Albero Oggetti a cui si fa riferimento (dettagli snapshot) e l'Albero Oggetti a cui si fa riferimento (differenze tra snapshot) mostrano gli oggetti a cui fa riferimento l'istanza o il tipo selezionato.

Campi Tipo oggetto e Istanza

Quando una voce Tipo oggetto ha voci figlio, puoi scegliere l'icona a forma di freccia per visualizzarle. Se il colore del testo Tipo oggetto è blu, puoi scegliere di passare all'oggetto nel suo file di codice sorgente. Il file di origine si apre in una finestra separata.

I nomi di istanza sono ID univoci generati dallo strumento Utilizzo memoria.

Suggerimento

Se noti un tipo che non riesci a identificare facilmente o se non capisci in che modo è interessato dal codice, non ti preoccupare.Probabilmente si tratta di un oggetto di .NET Framework, del sistema operativo o del compilatore visualizzato dallo strumento Utilizzo memoria perché coinvolto nelle catene di proprietà degli oggetti.

Filtri degli alberi dei report

La maggior parte delle app contiene un numero sorprendentemente elevato di tipi, molti dei quali sono irrilevanti per uno sviluppatore di app. Lo strumento Utilizzo memoria definisce due filtri, che puoi usare per nascondere la maggior parte di questi tipi negli alberi Heap gestito e Percorsi della radice. Puoi anche filtrare un albero per nome di tipo.

Opzioni di Ordina e filtra

Filtro

Immetti una stringa nella casella Filtro per limitare la visualizzazione dell'albero ai tipi che contengono il testo specificato. Il filtro non fa distinzione tra maiuscole e minuscole e riconosce la stringa specificata in ogni parte dei nomi di tipo.

Comprimi oggetti piccoli

Quando questo filtro è applicato, i tipi per cui l'impostazione Dimensione (byte) è minore dello 0,5% della dimensione totale della memoria dello snapshot vengono nascosti nell'elenco Heap gestito.

Just My Code

Il filtro Solo codice utente nasconde la maggior parte delle istanze generate da codice esterno. I tipi esterni sono di proprietà del sistema operativo o di componenti .NET Framework oppure sono generati dal compilatore.

Report dettagli degli snapshot

Usa un report dettagli di uno snapshot per concentrarti su un solo snapshot di una sessione di diagnostica. Per aprire un report dettagli, scegli uno dei link in una vista dello snapshot, come mostrato nell'immagine. Con entrambi i link viene aperto lo stesso report e l'unica differenza è il tipo di ordinamento iniziale dell'albero Heap gestito nel report. In entrambi i casi, puoi modificare il tipo di ordinamento dopo l'apertura del report.

Collegamenti al report snapshot in una visualizzazione snapshot

  • Il link MB ordina il report in base alla colonna Dimensione inclusiva (byte).

  • Il link Oggetti ordina il report in base alla colonna Conteggio.

Albero Heap gestito (dettagli di snapshot)

Nell'albero Heap gestito sono elencati i tipi di oggetti contenuti in memoria. Puoi espandere un nome di tipo per visualizzare le dieci istanze più grandi del tipo, ordinate in base alla dimensione. Se selezioni un tipo o un'istanza, vengono visualizzati gli alberi Percorsi della radice e Oggetti a cui si fa riferimento per l'elemento selezionato.

Albero Heap gestito

Tipo oggetto

Nome dell'istanza di tipo o di oggetto.

Conteggio

Numero di istanze di oggetto del tipo. Il numero è sempre 1 per un'istanza.

Dimensione (byte)

Per un tipo, dimensione di tutte le istanze del tipo nello snapshot della memoria, esclusa la dimensione degli oggetti contenuti nelle istanze.

Per un'istanza o un tipo, dimensione dell'oggetto, esclusa la dimensione degli oggetti contenuti nell'istanza.  

Dimensione inclusiva (byte)

Dimensione delle istanze del tipo o di una singola istanza, inclusa la dimensione degli oggetti contenuti.

Albero Percorsi della radice (dettagli di snapshot)

L'albero Percorsi della radice mostra la catena di oggetti che fanno riferimento al tipo o all'istanza. Garbage Collector di .NET Framework pulisce la memoria per un oggetto solo una volta rilasciati tutti i riferimenti.

Albero Percorsi della radice per Tipi

Quando visualizzi un tipo nell'albero Percorsi della radice il numero di oggetti dei tipi che contengono riferimenti al tipo viene visualizzato nella colonna Conteggio riferimenti. La colonna non è visualizzata quando analizzi un'istanza.

Albero Oggetti a cui si fa riferimento (dettagli di snapshot)

L'albero Oggetti a cui si fa riferimento mostra gli oggetti a cui fa riferimento l'istanza o il tipo selezionato.

Albero Oggetti a cui si fa riferimento per le istanze

Tipo oggetto/Istanza

Nome dell'istanza di tipo o di oggetto.

Dimensione (byte)

Per un tipo, dimensione di tutte le istanze del tipo, esclusa la dimensione degli oggetti contenuti nel tipo.

Per un'istanza, dimensione dell'oggetto, esclusa la dimensione degli oggetti contenuti nell'oggetto.

Dimensione inclusiva (byte)

Dimensione totale delle istanze del tipo o dimensione dell'istanza, inclusa la dimensione degli oggetti contenuti.

Report delle differenze degli snapshot

Un report delle differenze degli snapshot mostra le modifiche tra uno snapshot principale e lo snapshot creato immediatamente prima. Per aprire un report delle differenze, scegli uno dei link in una vista dello snapshot, come mostrato nell'immagine. Con entrambi i link viene aperto lo stesso report e l'unica differenza è il tipo di ordinamento iniziale dell'albero Heap gestito nel report. Puoi modificare il tipo di ordinamento dopo l'apertura del report.

Collegamenti al report delle differenze in una visualizzazione snapshot

  • Il link MB ordina il report in base alla colonna Dimensione inclusiva (byte).

  • Il link Oggetti ordina il report in base alla colonna Conteggio.

Albero Heap gestito (differenze degli snapshot)

Nell'albero Heap gestito sono elencati i tipi di oggetti contenuti in memoria. Puoi espandere un nome di tipo per visualizzare le dieci istanze più grandi del tipo, ordinate in base alla dimensione. Se selezioni un tipo o un'istanza, vengono visualizzati gli alberi Percorsi della radice e Oggetti a cui si fa riferimento per l'elemento selezionato.

Albero Heap gestito per un tipo nel report delle differenze

Nota che le colonne Conteggio, Dimensione (byte) e Dimensione inclusiva (byte) sono state compresse nell'immagine.

Tipo oggetto

Nome dell'istanza di tipo o di oggetto.

Conteggio

Numero di istanze di un tipo nello snapshot principale. Il valore di Conteggio è sempre 1 per un'istanza.

Diff. conteggio

Per un tipo, differenza nel numero di istanze del tipo tra lo snapshot principale e quello precedente. Il campo è vuoto per un'istanza.

Dimensione (byte)

Dimensione degli oggetti nello snapshot principale, esclusa la dimensione degli oggetti contenuti negli oggetti. Per un tipo, Dimensione (byte) e Dimensione inclusiva (byte) corrispondono ai totali delle dimensioni delle istanze di tipo.

Diff. dimensione totale (byte)

Per un tipo, differenza nella dimensione totale delle istanze del tipo tra lo snapshot principale e quello precedente, esclusa la dimensione degli oggetti contenuti nelle istanze. Il campo è vuoto per un'istanza.

Dimensione inclusiva (byte)

Dimensione degli oggetti nello snapshot principale, inclusa la dimensione degli oggetti contenuti negli oggetti.

Differenza dimensioni inclusive (byte)

Per un tipo, differenza nella dimensione di tutte le istanze del tipo tra lo snapshot principale e quello precedente, inclusa la dimensione degli oggetti contenuti negli oggetti. Il campo è vuoto per un'istanza.

Albero Percorsi della radice (differenza degli snapshot)

L'albero Percorsi della radice mostra la catena di oggetti che fanno riferimento al tipo o all'istanza. Garbage Collector di .NET Framework pulisce la memoria per un oggetto solo una volta rilasciati tutti i riferimenti.

Albero Percorsi della radice per le istanze in una visualizzazione differenze

Albero Oggetti a cui si fa riferimento (differenza degli snapshot)

L'albero Oggetti a cui si fa riferimento mostra gli oggetti a cui fa riferimento l'istanza o il tipo principale.

Albero Oggetti a cui si fa riferimento per le istanze

Tipo oggetto/Istanza

Nome dell'istanza di tipo o di oggetto.

Dimensione (byte)

Per un'istanza, dimensione dell'oggetto nello snapshot principale, esclusa la dimensione degli oggetti contenuti nell'istanza.

Per un tipo, dimensione totale di tutte le istanze del tipo nello snapshot principale, esclusa la dimensione degli oggetti contenuti nell'istanza.

Dimensione inclusiva (byte)

Dimensione degli oggetti nello snapshot principale, inclusa la dimensione degli oggetti contenuti negli oggetti.

Vedere anche

Concetti

Analizzare l'utilizzo della memoria (JavaScript)

Analizzare le prestazioni di applicazioni Windows Store tramite gli strumenti di diagnostica di Visual Studio

Eseguire strumenti di analisi dalla pagina Prestazioni e diagnostica

Altre risorse

Procedure consigliate per app di Windows Store scritte in C++, C# e Visual Basic