Esaminare prima di tutto gli strumenti di profilatura (C#, Visual Basic, C++, F#)

Gli strumenti di misurazione delle prestazioni delle applicazioni sono essenziali per gli sviluppatori che vogliono ottimizzare il codice e migliorare le prestazioni dell'applicazione. Visual Studio offre una gamma di strumenti di profilatura e diagnostica che consentono di diagnosticare l'utilizzo della memoria e della CPU e altri problemi a livello di applicazione. Con questi strumenti è possibile accumulare dati sulle prestazioni durante l'esecuzione dell'applicazione. Un profiler consente di prendere decisioni informate rapidamente fornendo una rappresentazione visiva dei tempi di esecuzione e dell'utilizzo della CPU per l'applicazione. In questo articolo viene illustrato rapidamente gli strumenti di profilatura più comuni.

Per informazioni sulla scelta dello strumento corretto o per visualizzare il supporto dello strumento di profilatura per diversi tipi di app, vedere Quale strumento è consigliabile usare? Per un'esercitazione che illustra un approccio generale all'ottimizzazione del codice usando gli strumenti di profilatura, vedere Case study: Guida per principianti all'ottimizzazione del codice.

Misurare le prestazioni nelle build di versione

Gli strumenti nel profiler prestazioni sono progettati per fornire analisi per le build di rilascio . In Performance Profiler puoi raccogliere informazioni di diagnostica durante l'esecuzione dell'app e quindi esaminare le informazioni raccolte dopo l'arresto dell'app (un'analisi post-mortem).

Aprire il Profiler prestazioni scegliendo Debug>Performance Profiler (o ALT + F2).

Screenshot di Performance Profiler.

Screenshot di Performance Profiler.

Per altre informazioni sull'uso dello strumento Utilizzo CPU o Utilizzo memoria in Profiler prestazioni e sugli strumenti integrati nel debugger, vedere Eseguire strumenti di profilatura con o senza il debugger.

Gli strumenti disponibili nel profiler prestazioni includono:

Per informazioni sugli strumenti di profilatura supportati per i diversi tipi di app, vedere Quale strumento si deve usare?.

In alcuni scenari, la finestra consente di selezionare più strumenti di profilatura. Gli strumenti come Utilizzo CPU possono visualizzare dati complementari che agevolano l'analisi. È anche possibile usare il profiler della riga di comando per abilitare scenari che coinvolgono più strumenti di profilatura.

Misurare le prestazioni durante il debug

Gli strumenti di profilatura a cui è possibile accedere durante una sessione di debug sono disponibili nella finestra Strumenti di diagnostica. La finestra Strumenti di diagnostica viene visualizzata automaticamente, a meno che non sia stata disattivata. Per visualizzare la finestra, fare clic su Debug/Windows/Mostra strumenti di diagnostica (o premere CTRL + ALT + F2). Con finestra aperta è possibile selezionare gli strumenti per cui si vogliono raccogliere dati.

Finestra Strumenti di diagnostica

Durante il debug, è possibile usare la finestra Strumenti di diagnostica per analizzare CPU, utilizzo della memoria, contatori .NET e visualizzare eventi che mostrano informazioni correlate alle prestazioni.

Finestra Strumenti di diagnostica

Durante il debug è possibile usare la finestra Strumenti di diagnostica per l'analisi della CPU e dell'uso della memoria e si possono visualizzare gli eventi che generano informazioni relative alle prestazioni.

Visualizzazione Riepilogo strumenti di diagnostica

Visualizzazione Riepilogo strumenti di diagnostica

La finestra Strumenti di diagnostica è un modo comune per profilare le app, ma per le build di rilascio è anche possibile eseguire un'analisi post-mortem dell'app. Per altre informazioni sui diversi approcci, vedere Eseguire strumenti di profilatura con o senza il debugger. Per informazioni sugli strumenti di profilatura supportati per i diversi tipi di app, vedere Quale strumento si deve usare?.

Gli strumenti disponibili nella finestra Strumenti di diagnostica o durante una sessione di debug includono:

Suggerimento

Usare il riavvio per ignorare la pagina di avvio ed eseguire automaticamente con le impostazioni precedenti premendo ALT+F2 o facendo clic su Debug > Performance Profiler.

Nota

Per Windows 8 e versioni successive è necessario eseguire gli strumenti di profilatura con il debugger, nella finestra Strumenti di diagnostica.

Analizzare l'utilizzo della CPU

L'uso dello strumento Utilizzo CPU è consigliabile per iniziare ad analizzare le prestazioni dell'applicazione. Lo strumento offre maggiori informazioni sulle risorse della CPU consumate dall'applicazione. È possibile usare lo strumento utilizzo CPU integrato nel debugger o lo strumento utilizzo CPU post-mortem.

Quando si usa lo strumento Utilizzo CPU integrato nel debugger, aprire la finestra Strumento di diagnostica (se è chiusa, scegliere Debug/Windows/Mostra strumenti di diagnostica). Durante il debug, aprire la visualizzazione Riepilogo e selezionare Registra profilo CPU.

Abilitare l'utilizzo della CPU negli strumenti di diagnostica

Abilitare l'utilizzo della CPU negli strumenti di diagnostica

Un modo per usare lo strumento consiste nell'impostare due punti di interruzione nel codice, uno all'inizio e uno alla fine della funzione o l'area del codice da analizzare. Esaminare i dati di profilatura durante la pausa in corrispondenza del secondo punto di interruzione.

La visualizzazione Utilizzo CPU mostra un elenco di funzioni ordinate per esecuzione più lunga, con la funzione con esecuzione più lunga nella parte superiore in Funzioni principali. La sezione Percorso critico mostra lo stack di chiamate per le funzioni che usano la maggior parte della CPU. Questi elenchi consentono di guidare le funzioni in cui si verificano colli di bottiglia delle prestazioni.

Visualizzazione Utilizzo CPU degli strumenti di diagnostica

La visualizzazione Utilizzo CPU contiene un elenco di funzioni ordinate in base a quelle in esecuzione da tempo, con la funzione di maggior durata in cima all'elenco. In questo modo è possibile sapere quali sono le funzioni in cui si verificano colli di bottiglia delle prestazioni.

Visualizzazione Utilizzo CPU degli strumenti di diagnostica

Fare clic su una funzione a cui si è interessati e verrà visualizzata una visualizzazione albero delle chiamate più dettagliata, con la funzione selezionata evidenziata. La tabella mostra le colonne con dati, ad esempio il tempo impiegato nella funzione, incluse le funzioni chiamate (CPU totale) e una seconda colonna che mostra il tempo impiegato in una funzione, escludendo le funzioni chiamate (CPU self). Questi dati consentono di valutare se la funzione stessa è un collo di bottiglia delle prestazioni.

Suggerimento

Il profiler di Visual Studio supporta sia la raccolta che la visualizzazione di tracce. Il profiler può anche visualizzare tracce raccolte in precedenza da altri strumenti, ad esempio dotnet-trace. Dotnet-trace produce risultati di campionamento, non una traccia instrumentata. Per altre informazioni, vedere dotnet-trace.

Visualizzazione

Fare clic su una funzione a cui si è interessati e verrà visualizzata una visualizzazione "farfalla" a tre riquadri più dettagliata, con la funzione selezionata al centro della finestra, la funzione chiamante a sinistra e chiamate funzioni a destra. La sezione Corpo funzione indica la quantità totale di tempo (e la percentuale di tempo) impiegata nel corpo della funzione, escluso il tempo dedicato alle funzioni chiamanti e chiamate. Questi dati consentono di valutare se la funzione stessa è un collo di bottiglia delle prestazioni.

Visualizzazione

Analizzare l'utilizzo della memoria

La finestra Strumenti di diagnostica consente anche di valutare l'utilizzo della memoria nell'app usando lo strumento Utilizzo memoria. Ad esempio, è possibile esaminare il numero e le dimensioni degli oggetti nell'heap. È possibile usare lo strumento utilizzo memoria integrato nel debugger o lo strumento post-mortem Memory Usage (Utilizzo memoria post-mortem) nel Profiler prestazioni.

Gli sviluppatori .NET possono scegliere tra lo strumento Allocazione oggetti .NET o lo strumento Utilizzo memoria .

  • Lo strumento di allocazione di oggetti .NET consente di identificare i modelli di allocazione e le anomalie nel codice .NET e di identificare i problemi comuni con Garbage Collection. Questo strumento viene eseguito solo come strumento post-mortem. È possibile eseguire questo strumento in computer locali o remoti.
  • Lo strumento Utilizzo memoria è utile per identificare le perdite di memoria, che in genere non sono comuni nelle app .NET. Se è necessario usare le funzionalità del debugger durante il controllo della memoria, ad esempio l'esecuzione di istruzioni nel codice, è consigliabile usare lo strumento di utilizzo della memoria integrato nel debugger.

Per analizzare l'utilizzo della memoria con lo strumento Utilizzo memoria, è necessario acquisire almeno uno snapshot di memoria. Spesso, il modo migliore per analizzare la memoria consiste nel creare due snapshot: il primo immediatamente prima di un sospetto problema di memoria e il secondo subito dopo che si è verificato un sospetto problema di memoria. È quindi possibile confrontare i due snapshot in una visualizzazione differenziale e vedere esattamente che cosa è cambiato. La figura seguente mostra la creazione di uno snapshot con lo strumento integrato nel debugger.

Creare uno snapshot negli strumenti di diagnostica

Creare uno snapshot negli strumenti di diagnostica

Quando si seleziona uno dei collegamenti freccia, viene fornita una visualizzazione differenziale dell'heap (una freccia Aumento dell'utilizzo della memoria rossa su mostra un numero crescente di oggetti (a sinistra) o una dimensione dell'heap crescente (destra)). Se si sceglie il collegamento a destra, si ottiene una visualizzazione differenziale dell'heap ordinata in base agli oggetti che hanno contribuito di più all'aumento delle dimensioni dell'heap. Ciò consente di individuare i problemi di memoria. Ad esempio, nell'illustrazione riportata di seguito, i byte usati dagli oggetti ClassHandlersStore sono aumentati di 3.492 byte nel secondo snapshot.

Visualizzazione diff dell'heap degli strumenti di diagnostica

Visualizzazione diff dell'heap degli strumenti di diagnostica

Se invece si fa clic sul collegamento a sinistra nella visualizzazione Utilizzo memoria, la visualizzazione dell'heap è organizzata in base al numero di oggetti. Gli oggetti di un tipo particolare il cui numero è aumentato maggiormente appaiono in cima all'elenco (ordinati in base alla colonna Diff. conteggio).

Strumentazione

Lo strumento Di strumentazione è simile allo strumento Utilizzo CPU, ad eccezione del fatto che fornisce conteggi delle chiamate esatte e tempo di clock invece dell'utilizzo della CPU. Il metodo di strumentazione richiede un sovraccarico maggiore rispetto allo strumento Utilizzo CPU. Questo strumento è disponibile in Performance Profiler. Aprire il Profiler prestazioni scegliendo Debug>Performance Profiler (o ALT + F2). Per altre informazioni, vedere Strumentazione.

Screenshot che mostra i dati di strumentazione .NET.

Esaminare l'I/O dei file

Lo strumento I/O file consente di comprendere come ottimizzare le operazioni di I/O file per migliorare le prestazioni nelle app. Se si sta tentando di analizzare e diagnosticare tempi di caricamento lenti, il nuovo strumento di I/O file consente di comprendere in che modo le operazioni di I/O influisce sul tempo impiegato. Questo strumento è disponibile in Performance Profiler. Aprire il Profiler prestazioni scegliendo Debug > Performance Profiler (o ALT + F2).

Lo strumento mostra le operazioni di lettura e scrittura di file in una visualizzazione elenco a schede.

Screenshot che mostra lo strumento I/O file arrestato.

Esaminare le prestazioni usando PerfTips

Spesso, il modo più semplice per visualizzare le informazioni sulle prestazioni consiste nell'usare PerfTips. Usando PerfTips, è possibile visualizzare le informazioni sulle prestazioni durante l'interazione con il codice. È possibile verificare informazioni quali la durata dell'evento, misurata da quando il debugger è stato messo pausa l'ultima volta o quando è stata avviata l'applicazione. Ad esempio, se si esegue il codice (F10, F11), PerfTips mostra la durata del runtime dell'app dall'operazione precedente al passaggio corrente.

Screenshot di PerfTips.

Screenshot di PerfTips.

È possibile usare PerfTips per esaminare il tempo necessario per l'esecuzione di un blocco di codice o il tempo necessario per il completamento di una singola funzione.

PerfTips mostra gli stessi eventi visualizzati anche nella visualizzazione Eventi di Strumenti di diagnostica. Nella visualizzazione Eventi è possibile visualizzare eventi diversi che si verificano durante il debug, ad esempio l'impostazione di un punto di interruzione o un'operazione di esecuzione dell'istruzione del codice.

Screenshot della visualizzazione Eventi degli strumenti di diagnostica.

Screenshot della visualizzazione Eventi degli strumenti di diagnostica.

Nota

Gli utenti di Visual Studio Enterprise possono visualizzare anche gli eventi IntelliTrace in questa scheda.

Analizzare il codice asincrono (.NET)

Lo strumento asincrono .NET consente di analizzare le prestazioni del codice asincrono nell'applicazione. Questo strumento è disponibile in Performance Profiler. Aprire il Profiler prestazioni scegliendo Debug>Performance Profiler (o ALT + F2).

Lo strumento mostra ogni operazione asincrona in una visualizzazione elenco. È possibile visualizzare informazioni quali ora di inizio, ora di fine e tempo totale per un'operazione asincrona.

Strumento asincrono .NET arrestato

Analizzare il codice asincrono (.NET)

Lo strumento asincrono .NET consente di analizzare le prestazioni del codice asincrono nell'applicazione. Questo strumento è disponibile in Performance Profiler. Aprire il Profiler prestazioni scegliendo Debug>Performance Profiler (o ALT + F2).

Lo strumento mostra ogni operazione asincrona in una visualizzazione elenco. È possibile visualizzare informazioni quali ora di inizio, ora di fine e tempo totale per un'operazione asincrona.

Strumento asincrono .NET arrestato

Analizzare le prestazioni del database (.NET Core)

Per le app .NET Core che usano ADO.NET o Entity Framework Core, lo strumento database consente di registrare le query di database eseguite dall'applicazione durante una sessione di diagnostica. È quindi possibile analizzare le informazioni sulle singole query per individuare le posizioni in cui è possibile migliorare le prestazioni dell'app. Questo strumento è disponibile in Performance Profiler. Aprire il Profiler prestazioni scegliendo Debug>Performance Profiler (o ALT + F2).

Lo strumento mostra ogni query in una visualizzazione elenco. È possibile visualizzare informazioni come l'ora di inizio e la durata della query.

Allocation (Allocazione)

Visualizzare i contatori .NET (.NET Core)

A partire da Visual Studio 2019 versione 16.7, è possibile usare lo strumento Contatori .NET in Visual Studio per visualizzare i contatori delle prestazioni. È possibile visualizzare i contatori creati usando i contatori dotnet. I contatori dotnet supportano molti contatori, ad esempio l'utilizzo della CPU e le dimensioni dell'heap di Garbage Collector.

Lo strumento mostra i valori attivi per ogni contatore in una visualizzazione elenco.

Raccolta dello strumento contatore .NET.

Esaminare gli eventi dell'applicazione

Il visualizzatore eventi generici consente di visualizzare l'attività dell'applicazione tramite un elenco di eventi, ad esempio il caricamento del modulo, l'avvio del thread e le configurazioni di sistema, per facilitare la diagnosi delle prestazioni dell'applicazione direttamente all'interno del profiler di Visual Studio. Questo strumento è disponibile in Performance Profiler. Aprire il Profiler prestazioni scegliendo Debug>Performance Profiler (o ALT + F2).

Lo strumento mostra ogni evento in una visualizzazione elenco. Le colonne forniscono informazioni su ogni evento, ad esempio il nome dell'evento, il timestamp e l'ID processo.

traccia Visualizzatore eventi

Visualizzare eventi personalizzati nei grafici della sequenza temporale

È possibile creare eventi personalizzati a livello di programmazione che vengono visualizzati come icone nei grafici della sequenza temporale, ad esempio i grafici relativi all'utilizzo della CPU e all'utilizzo della memoria. Per altre informazioni, vedere Aggiungere contrassegni utente alla sequenza temporale.

Analizzare l'uso di risorse (XAML)

Nelle app XAML, ad esempio le app WPF desktop di Windows e le app UWP, è possibile analizzare il consumo di risorse usando lo strumento Sequenza temporale applicazione. È possibile ad esempio analizzare il tempo impiegato dall'applicazione per preparare i frame dell'interfaccia utente (layout e rendering), per soddisfare le richieste di rete e disco e in scenari come l'avvio dell'applicazione, il caricamento delle pagine e il ridimensionamento di Windows. Per usare lo strumento, scegliere Sequenza temporale dell'applicazione nel profiler delle prestazioni e quindi scegliere Inizia. Nell'applicazione seguire lo scenario con un sospetto problema di consumo delle risorse e quindi scegliere Arresta raccolta per generare il report.

I framerate ridotti nel grafico della velocità effettiva degli elementi visivi possono corrispondere a problemi di visualizzazione che si riscontrano quando si esegue l'applicazione. Analogamente, i numeri elevati nell'utilizzo dei thread di interfaccia utente possono corrispondere a problemi di velocità di risposta dell'interfaccia utente. Nel report è possibile selezionare un periodo di tempo con un sospetto problema di prestazioni e quindi esaminare in dettaglio le attività del thread dell'interfaccia utente nella visualizzazione Dettagli sequenza temporale (riquadro inferiore).

Strumento di profilatura sequenza temporale dell'applicazione

Strumento di profilatura sequenza temporale dell'applicazione

Nella visualizzazione Dettagli sequenza temporale è possibile trovare informazioni quali il tipo di attività (o l'elemento dell'interfaccia utente coinvolto) insieme alla durata dell'attività. Ad esempio, nella figura un evento Layout per un controllo Grid impiega 57,53 ms.

Per altre informazioni, vedere Sequenza temporale dell'applicazione.

Esaminare le prestazioni dell'interfaccia utente e gli eventi di accessibilità (piattaforma UWP)

Nelle app della piattaforma UWP è possibile abilitare l'analisi dell'interfaccia utente nella finestra Strumenti di diagnostica. Lo strumento cerca i comuni problemi di prestazioni o accessibilità e li indica nella visualizzazione Eventi durante il debug. Le descrizioni degli eventi contengono informazioni che possono essere utili per risolvere i problemi.

Visualizzare gli eventi di analisi dell'interfaccia utente negli strumenti di diagnostica

Visualizzare gli eventi di analisi dell'interfaccia utente negli strumenti di diagnostica

Analizza l'utilizzo della GPU (Direct3D)

Nelle applicazioni Direct3D (i componenti Direct3D devono essere in C++) è possibile esaminare l'attività sulla GPU e analizzare i problemi di prestazioni. Per altre informazioni, vedere l'articolo relativo all'uso della GPU. Per usare lo strumento, scegliere Utilizzo GPU nel profiler delle prestazioni e quindi scegliere Inizia. Nell'applicazione seguire lo scenario che interessa per la profilatura e quindi scegliere Arresta raccolta per generare un report.

Quando si seleziona un periodo di tempo nei grafici e si sceglie Visualizza dettagli, appare una visualizzazione dettagliata nel riquadro inferiore. Nella visualizzazione dettagliata è possibile esaminare l'entità dell'attività in corso in ogni CPU e GPU. Selezionare gli eventi nel riquadro inferiore per ottenere i popup nella sequenza temporale. Ad esempio, selezionare l'evento Present per visualizzare i popup delle chiamate presenti. (Le linee VSync verticali di colore grigio chiaro possono essere usate come riferimento per comprendere se determinate Presenti chiamate perse VSync. Deve essere presente una chiamata Present tra ogni due VSync per consentire all'app di raggiungere costantemente 60 FPS.

Strumento di profilatura utilizzo GPU

Strumento di profilatura utilizzo GPU

È anche possibile usare i grafici per determinare se esistono colli di bottiglia delle prestazioni associati alla CPU o GPU.

Analizzare le prestazioni (strumenti legacy)

In Visual Studio 2019, Esplora prestazioni legacy e gli strumenti di profilatura correlati, ad esempio la Creazione guidata prestazioni, sono stati piegati nel Profiler prestazioni, che è possibile aprire usando Debug>Performance Profiler. In Performance Profiler gli strumenti di diagnostica disponibili dipendono dalla destinazione scelta e dal progetto di avvio corrente. Lo strumento Utilizzo CPU fornisce la funzionalità di campionamento supportata in precedenza nella Procedura guidata prestazioni. Lo strumento Strumentazione fornisce la funzionalità di profilatura instrumentata (per conteggi e durate precise delle chiamate) incluse nella Procedura guidata prestazioni. Altri strumenti di memoria vengono visualizzati anche nel Profiler prestazioni.

Strumento Esplora prestazioni