Procedura dettagliata: analisi di applicazioni
Aggiornamento: novembre 2007
In questa procedura dettagliata viene illustrato come analizzare un'applicazione per l'identificazione dei problemi di prestazioni.
Vengono mostrati in dettaglio tutti i passaggi del processo di analisi di un'applicazione gestita, nonché l'utilizzo del campionamento e della strumentazione per isolare e identificare i problemi presenti nell'applicazione.
Nel corso di questa procedura dettagliata verranno effettuate le seguenti operazioni:
Analizzare un'applicazione utilizzando il metodo di campionamento.
Esaminare i risultati dell'analisi mediante campionamento per individuare e risolvere un problema di prestazioni.
Analizzare un'applicazione utilizzando il metodo di strumentazione.
Esaminare i risultati dell'analisi mediante strumentazione per individuare e risolvere un problema di prestazioni.
Prerequisiti
Microsoft Visual Studio 2005 Team System.
Conoscenza di livello medio di C#.
Una copia di Esempio PeopleTrax (strumenti di analisi).
Per utilizzare le informazioni fornite dall'analisi, è preferibile che siano disponibili le informazioni di debug sui simboli.
Analisi mediante il metodo di campionamento
Il campionamento è il metodo di analisi con cui il processo in questione viene sottoposto regolarmente a polling al fine di stabilire quale sia la funzione attiva. Nei dati risultanti è presente un conteggio della frequenza con cui la funzione in oggetto si è trovata in cima allo stack di chiamate quando è stato effettuato il campionamento del processo.
Per analizzare un'applicazione utilizzando il metodo di campionamento
Aprire la soluzione PeopleTrax in Microsoft Visual Studio 2005.
La soluzione PeopleTrax verrà inserita in Esplora soluzioni.
Scegliere Avvia Creazione guidata sessione di prestazioni dal menu Analizza.
Verrà visualizzata la Creazione guidata sessione di prestazioni.
Selezionare PeopleTrax dall'elenco a discesa Destinazioni disponibili e quindi scegliere Avanti.
Scegliere Campionamento e quindi Avanti.
Fare clic su Fine.
Impostare l'opzione di configurazione del progetto su Release.
Si consiglia di utilizzare una build di rilascio per rilevare problemi di prestazioni nell'applicazione.
Una build di rilascio è consigliata per l'analisi perché una build di debug contiene informazioni aggiuntive che potrebbero incidere negativamente sulle prestazioni e non riuscire a illustrare accuratamente i problemi di prestazioni.
Una build di rilascio non fornisce automaticamente informazioni sui simboli. Per configurare la compilazione affinché le informazioni sui simboli vengano visualizzate nei report di prestazioni del profiler, vedere /Z7, /Zi, /ZI (Formato informazioni di debug) e Procedura: fare riferimento alle informazioni sui simboli di Windows.
Fare clic su Avvio sulla barra degli strumenti di Esplora prestazioni.
In Visual Studio 2005 viene compilato il progetto e viene avviata l'analisi dell'applicazione. Verrà visualizzata la finestra dell'applicazione PeopleTrax.
Fare clic su Get People.
Scegliere EsportaDati.
Viene aperto Blocco note in cui è visualizzato un nuovo file contenente i dati esportati da PeopleTrax.
Chiudere Blocco note e successivamente l'applicazione PeopleTrax.
In Visual Studio 2005 viene generato e caricato automaticamente un report delle sessioni di prestazioni (*.vsp).
Per esaminare i risultati dell'analisi mediante campionamento
Sulla barra degli strumenti della finestra Profiler, aprire la casella di riepilogo a discesa delle visualizzazioni di report e selezionare la visualizzazione Funzioni del report.
Fare clic con il pulsante destro del mouse sulla griglia di dati e quindi scegliere Aggiungi/Rimuovi colonne.
Verrà visualizzata la finestra di dialogo Aggiungi/Rimuovi colonne.
Dall'elenco di colonne selezionare Nome file di origine e quindi fare clic su OK.
Fare clic sulla colonna Nome file di origine nella griglia di dati per ordinarla.
Se si esegue l'ordinamento in base a questa colonna, verranno raggruppate tutte le righe relative alla soluzione PeopleTrax.
Individuare le righe in cui sono visualizzati i dati relativi alla soluzione PeopleTrax.
Dopo averle esaminate, sarà evidente che le funzioni riportate di seguito sono state sottoposte a campionamento con una frequenza maggiore rispetto alle altre parti della soluzione PeopleTrax.
PeopleTrax.Form1.GetPeopleButton_Click
Impostare come attivo l'evento GetPeopleButton_Click.
Fare clic con il pulsante destro del mouse sulla riga PeopleTrax.Form1.GetPeople_Click e quindi scegliere Visualizza origine.
Nell'editor di codice viene aperto Form1.cs e il puntatore viene visualizzato nell'evento GetPeopleButton_Click.
Esaminare il codice sorgente dell'evento GetPeopleButton_Click.
A questo punto è possibile identificare le aree da ottimizzare:
Se si desidera aggiungere un elemento alla volta utilizzando il metodo Add della classe ListView.ListViewItemCollection, è possibile utilizzare il metodo BeginUpdate per impedire che il controllo ridisegni la visualizzazione elenco ogni volta che viene aggiunto un elemento. Una volta aggiunti gli elementi desiderati al controllo, chiamare il metodo EndUpdate per consentire alla visualizzazione elenco di essere ridisegnata. Questo metodo di aggiunta di elementi impedisce che si verifichi uno sfarfallio del disegno della visualizzazione elenco quando si aggiungono numerosi elementi al controllo, oltre a ridurre il tempo richiesto per compilare la visualizzazione elenco.
L'impostazione predefinita in App.Config è 1500 nomi.
Quando si imposta il colore di primo piano dell'elemento visualizzazione elenco, è possibile migliorare le prestazioni utilizzando l'enumerazione KnownColor invece di specificare il colore in una stringa e chiamare il metodo Color.FromName.
Con questo evento viene chiamata una funzione denominata People.GetPeople per recuperare una matrice di nomi da aggiungere alla visualizzazione elenco.
Fare clic con il pulsante destro del mouse sulla chiamata a GetPeople, quindi scegliere Vai a definizione.
A questo punto è possibile identificare le aree da ottimizzare:
L'accesso al codice per recuperare una nuova matrice di fullNames e companyNames viene effettuato ripetutamente. È necessario creare queste matrici una volta, quindi riutilizzarle.
Per sostituire le aree problematiche con il codice ottimizzato, aggiungere OPTIMIZED_GETPEOPLE come simbolo di compilazione condizionata ai progetti PeopleTrax e People.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto PeopleTrax, quindi scegliere Proprietà.
Verrà visualizzato il form delle proprietà del progetto PeopleTrax.
Fare clic sulla scheda Compilazione.
Aggiungere OPTIMIZED_GETPEOPLE alla casella di testo Simboli di compilazione condizionale.
Ripetere i passaggi 18 - 20 per il progetto People.
Chiudere i form delle proprietà dei progetti, quindi salvare quando richiesto.
Eseguire nuovamente la sessione di analisi, anche se le prestazioni presentano miglioramenti visibili all'utente. La verifica dei dati dopo la risoluzione di un problema costituisce un passaggio importante se il primo problema ne nasconde altri.
Procedere ora all'analisi dell'applicazione utilizzando il metodo di strumentazione.
Analisi mediante il metodo di strumentazione
La strumentazione è il metodo di analisi secondo il quale le versioni speciali di binari sottoposti ad analisi contengono funzioni controlli che raccolgono informazioni sugli intervalli all'ingresso e all'uscita da funzioni in un modulo instrumentato. Poiché questo metodo è più invasivo rispetto al campionamento, implica un maggior sovraccarico. I binari instrumentati sono inoltre di dimensioni maggiori rispetto a quelli di debug e di rilascio e non sono destinati alla distribuzione.
Per analizzare un'applicazione esistente utilizzando il metodo di strumentazione
In Esplora prestazioni scegliere Strumentazione dall'elenco a discesa.
Nella barra degli strumenti di Esplora prestazioni fare clic sul pulsante Avvio.
In Microsoft Visual Studio 2005 viene compilato il progetto e viene avviata l'analisi dell'applicazione. Verrà visualizzata la finestra dell'applicazione PeopleTrax.
Fare clic su Get People.
La griglia di dati di PeopleTrax viene compilata.
Scegliere Esporta dati.
Viene avviato Blocco note in cui viene visualizzato un nuovo file contenente un elenco di persone ottenuto dall'applicazione PeopleTrax.
Chiudere Blocco note e successivamente l'applicazione PeopleTrax.
In Microsoft Visual Studio 2005 viene generato un report delle sessioni di prestazioni (*.vsp).
Per esaminare i risultati dell'analisi mediante strumentazione
Nella visualizzazione Riepilogo del report esaminare le tabelle di riepilogo per identificare la funzione chiamata con maggiore frequenza e la posizione in cui è stata eseguita la maggior parte delle operazioni dell'applicazione.
Sulla base di queste informazioni è possibile notare che l'applicazione ha impiegato una quantità notevole di tempo per l'esecuzione delle operazioni con System.String.Concat.
Fare doppio clic su System.String.Concat in una delle tabelle di riepilogo.
Il report viene passato alla visualizzazione Funzioni in cui risulta evidenziato System.String.Concat.
Fare clic con il pulsante destro del mouse sulla riga System.String.Concat e quindi scegliere Mostra in visualizzazione chiamante/chiamato.
Il report viene passato alla visualizzazione Chiamante/Chiamato in cui viene mostrato che la funzione in questione viene chiamata da PeopleTrax.Form1.ExportData.
Fare clic con il pulsante destro del mouse su PeopleTrax.Form1.ExportData e quindi scegliere Visualizza origine.
Nell'editor di codice viene aperto Form1.cs e il puntatore viene visualizzato nella funzione ExportData.
Esaminare il codice sorgente relativo alla funzione ExportData.
Dopo aver esaminato il codice sarà possibile notare che non sono presenti chiamate con valori letterali per System.String.Concat. Sono invece segnalati diversi utilizzi dell'operando +=, che in IL viene sostituito con le chiamate a System.String.Concat. Qualsiasi modifica apportata a una stringa in .NET Framework determina l'allocazione di una nuova stringa. In .NET Framework è disponibile una classe StringBuilder ottimizzata per la concatenazione di stringhe.
Per sostituire l'area problematica con il codice ottimizzato, aggiungere OPTIMIZED_EXPORTDATA come simbolo di compilazione condizionata al progetto PeopleTrax.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto PeopleTrax e scegliere Proprietà.
Verrà visualizzato il form delle proprietà del progetto PeopleTrax.
Fare clic sulla scheda Compila.
Aggiungere OPTIMIZED_EXPORTDATA alla casella di testo Simboli di compilazione condizionale.
Chiudere il form delle proprietà del progetto e scegliere Salva tutto quando richiesto.
Alla successiva esecuzione dell'applicazione sarà possibile riscontrare notevoli miglioramenti nelle prestazioni. Eseguire nuovamente la sessione di analisi, anche se le prestazioni presentano miglioramenti visibili all'utente. La verifica dei dati dopo la risoluzione di un problema costituisce un passaggio importante se il primo problema ne nasconde altri.
Vedere anche
Riferimenti
/Z7, /Zi, /ZI (Formato informazioni di debug)