Famiglia di prodotti per l'analisi delle prestazioni WPF
Windows SDK include una famiglia di strumenti per la profilatura delle prestazioni per le applicazioni WPF (Windows Presentation Foundation) denominata WPF Performance Suite. WPF Performance Suite consente di analizzare il comportamento in fase di esecuzione delle applicazioni WPF e di determinare le ottimizzazioni delle prestazioni applicabili. WPF Performance Suite include gli strumenti di profilatura delle prestazioni denominati Perforator e Visual Profiler. In questo argomento viene descritto come installare e usare gli strumenti Perforator e Visual Profiler di WPF Performance Suite.
Di seguito sono elencate le diverse sezioni di questo argomento:
Installazione di WPF Performance Suite
Avvio di WPF Performance Suite
Perforator
Profiler visuale
Installazione di WPF Performance Suite
Di seguito viene descritta la procedura per l'installazione di WPF Performance Suite.
Se si dispone di una versione precedente di Windows Performance Toolkit installata, disinstallarla.
Installare Windows SDK.
Nelle opzioni di installazione assicurarsi di selezionare l'opzione Windows Performance Toolkit in Common Utilities. Per informazioni sul download, vedere la pagina di download di Windows SDK.
Dopo aver installato Windows SDK, nel menu Start selezionare Tutti i programmi, Microsoft Windows SDK v7.1 e quindi Tools.
In Tools fare clic su Install Windows Performance Tool Kit.
Verrà visualizzata l'installazione guidata.
Seguire le istruzioni visualizzate per installare Windows Performance Toolkit.
Per impostazione predefinita, verranno installate le funzionalità seguenti.
Performance Analyzer
Guida di Windows Performance Toolkit
GPUView
WPF Performance Suite
Avvio di WPF Performance Suite
È necessario avviare WPF Performance Suite prima di eseguire l'applicazione che si desidera profilare. Per usare WPF Performance Suite, è necessario usare un account utente con privilegi amministrativi.
Di seguito viene descritta la procedura per l'avvio di WPF Performance Suite.
Nel menu Start selezionare Tutti i programmi e quindi Microsoft Windows Performance Toolkit.
Fare clic su WPF Performance Suite.
Se viene visualizzata una finestra di dialogo di Controllo dell'account utente fare clic su Sì.
WPF Performance Suite verrà avviato.
Al primo avvio di WPF Performance Suite viene visualizzata la finestra di dialogo Add Tools. La finestra di dialogo Add Tools consente di aggiungere strumenti di profilatura delle prestazioni. Per aggiungere uno strumento, selezionare un assembly che contiene uno strumento e quindi fare clic su Scan Assembly. È possibile aprire la finestra di dialogo Add Tools in qualsiasi momento facendo clic su Add Tools dal menu File. Nell'illustrazione seguente viene mostrata la finestra di dialogo Add Tools.
Finestra di dialogo Add Tools
Per impostazione predefinita, WPF Performance Suite include gli strumenti di profilatura delle prestazioni seguenti.
Strumento |
Descrizione |
---|---|
Perforator |
Analizza il comportamento di rendering. |
Visual Profiler |
Esegue la profilatura dell'uso dei servizi WPF, come gestione del layout e degli eventi per gli elementi nella struttura ad albero visuale. |
Assicurarsi che le caselle di controllo Perforator e Visual Profiler siano selezionate e quindi fare clic su OK.
Perforator
Perforator è uno strumento di profilatura delle prestazioni per analizzare il comportamento di rendering delle applicazioni WPF. L'interfaccia utente di Perforator visualizza un set di grafici che consentono di analizzare il comportamento di rendering in modo molto specifico in varie parti dell'applicazione, ad esempio la frequenza di aggiunta di rettangoli dirty e la frequenza dei fotogrammi. WPF usa una tecnica di rendering denominata rettangolo dirty, che implica l'esecuzione del rendering in un nuovo passaggio di rendering solo delle parti dello schermo modificate. Perforator include inoltre varie opzioni per la ricerca di problemi specifici. Perforator include inoltre report delle destinazioni di rendering software e un dispositivo di scorrimento per controllare la durata dei grafici. L'illustrazione seguente mostra l'interfaccia utente di Perforator.
Interfaccia utente di Perforator
Uso di Perforator
Per usare Perforator, avviare l'applicazione WPF che si desidera analizzare. Una volta avviata l'applicazione, fare clic sulla scheda Perforator fare clic sul menu Azioni e quindi su Select Process. Nella finestra di dialogo Select Process selezionare il processo dell'applicazione che si desidera analizzare e quindi fare clic su Select. Il nome e l'ID del processo dovrebbero essere visualizzati nella parte superiore della scheda Perforator. Selezionare le opzioni di rendering che si desidera analizzare. I valori dei dati di Perforator, ad esempio la frequenza dei fotogrammi, rispecchiano immediatamente il comportamento di rendering dell'applicazione. La figura seguente mostra un esempio.
Perforator con applicazione e opzioni di rendering selezionate
Grafici di Perforator
È importante che la frequenza dei fotogrammi, la frequenza di aggiunta di rettangoli dirty e il numero di destinazioni di rendering intermedie rimangano bassi per il rendering efficiente dell'applicazione WPF. Perforator include molti grafici utili per monitorare questi livelli.
Nella tabella seguente sono descritte le metriche supportate da ogni grafico.
Grafico cronologico |
Descrizione |
Note |
---|---|---|
Frame Rate |
Indica la frequenza con cui l'applicazione esegue il rendering sullo schermo. |
Per le applicazioni senza animazione, questo valore deve essere prossimo allo 0. Durante le animazioni in un'applicazione con buone prestazioni, la frequenza dei fotogrammi dovrebbe essere simile alla frequenza di aggiornamento del monitor (in genere 60 o 75). |
Dirty Rect Addition rate |
Indica il numero di aree rettangolari che devono essere aggiornate da WPF per ogni fotogramma. |
Il termine rettangolo dirty si riferisce a una tecnica di rendering con la quale viene eseguito il rendering solo delle parti dello schermo modificate. Un valore elevato indica la modifica di molte aree. Ciò non indica necessariamente una condizione buona o non buona, ma si tratta di un valore di cui tenere conto insieme alle prestazioni complessive dell'applicazione. |
SW IRTs Per Frame |
Mostra il numero di destinazioni di rendering intermedie software necessarie per il rendering di un fotogramma dell'applicazione. |
Le destinazioni di rendering intermedie sono superfici software dispendiose che WPF deve allocare e da cui o in cui deve copiare i dati. Le destinazioni di rendering intermedie software sono più dispendiose di quelle hardware. Le destinazioni di rendering intermedie sono in genere causate dall'uso della proprietà DrawingBrush, VisualBrush o Opacity in un elemento Visual oppure dalle modalità di disegno dei riquadri per un TileBrush. Se questo numero è alto (ad esempio, maggiore di 5), significa che il runtime WPF sta eseguendo una grande quantità di lavoro per eseguire il rendering dell'applicazione. In un computer che supporta l'accelerazione hardware, questo numero dovrebbe essere 0. In caso contrario, questo numero indica che il rendering di parte della scena viene eseguito tramite la pipeline software più lenta. |
HW IRTs Per Frame |
Mostra il numero di destinazioni di rendering intermedie hardware necessarie per il rendering di un fotogramma dell'applicazione. |
Le destinazioni di rendering intermedie sono superfici hardware dispendiose che WPF deve allocare e da cui o in cui deve copiare i dati. Le destinazioni di rendering intermedie sono in genere causate dall'uso della proprietà DrawingBrush, VisualBrush o Opacity in un elemento Visual oppure dalle modalità di disegno dei riquadri per un TileBrush. Se questo numero è alto (ad esempio, maggiore di 5), significa che il runtime WPF sta eseguendo una grande quantità di lavoro per eseguire il rendering dell'applicazione. In questo caso, sarà necessario analizzare tutte le aree del codice che usano gli elementi menzionati in precedenza. Le destinazioni di rendering intermedie hardware sono meno dispendiose di quelle software. |
Video Memory Usage |
Tiene traccia delle grandi allocazioni di memoria video a WPF per la trama e le destinazioni di rendering. Questa metrica non tiene traccia delle allocazioni di memoria al driver video o delle allocazioni di memoria per la compilazione e il caricamento di pixel shader e vertex shader. |
Il superamento della quantità disponibile di memoria per la trama determina di solito il fallback software della logica di rendering WPF e l'effetto moltiplicativo di più schermi (multimonitor) sulla quantità di memoria video richiesta per un'applicazione. |
Opzioni di rendering di Perforator e ottimizzazione del rendering
Perforator consente di impostare numerose opzioni di rendering che influenzano il comportamento di rendering in tempo reale dell'applicazione. L'impostazione di queste opzioni consente di visualizzare gli eventi di rendering che potrebbero essere problematici nell'applicazione. Queste opzioni sono disponibili nella parte inferiore dell'interfaccia utente.
L'illustrazione seguente mostra le opzioni di rendering di Perforator.
Opzioni di rendering di Perforator
In generale, per migliorare le prestazioni delle applicazioni WPF, è consigliabile ridurre al minimo il rendering software e ridurre il numero di destinazioni di rendering intermedie. Nelle sezioni seguenti viene descritto come usare Perforator per ottenere questi risultati.
Evitare il rendering software
Poiché la pipeline di rendering hardware WPF è notevolmente più veloce che la pipeline di rendering software, minore è la parte dell'interfaccia utente di cui viene eseguito il rendering a livello software, più veloce sarà il rendering dell'applicazione. In genere, il tempo necessario per eseguire il rendering di un'area nel software è proporzionale al numero di pixel sottoposti a rendering. Prestare pertanto attenzione alle aree grandi sottoposte a rendering tramite la pipeline software. Le aree di piccole dimensioni sono meno problematiche.
Nella tabella seguente sono elencate le opzioni di Perforator che consentono di rilevare i problemi di rendering software.
Opzione |
Descrizione |
Note |
---|---|---|
Draw software rendering with purple tint |
Disegna in viola tutte le aree di cui viene eseguito il rendering tramite la pipeline software. Sono inclusi le destinazioni di rendering software, il contenuto 3D software e il fallback software per ogni primitiva. |
La pipeline di rendering hardware WPF è notevolmente più veloce rispetto alla pipeline di rendering software. Una presenza eccessiva di rendering software indica in genere un problema. Sono esempi di cause di questo comportamento l'eccessiva suddivisione in riquadri di un Brush o il superamento delle dimensioni della trama della scheda video. |
Draw software rendered bitmap effects with red tint |
Disegna in rosso gli effetti bitmap con rendering software legacy. |
Le classi BitmapEffect con rendering software sono lente e dovrebbero essere evitate. È consigliabile usare le classi Effect con rendering hardware introdotte in .NET Framework 3.5 SP1. |
La figura seguente illustra l'applicazione di esempio PhotoDemo con l'opzione di rendering Draw software rendering with purple tint abilitata.
PhotoDemo con aree viola
Monitoraggio delle aree dirty
Dato che WPF aggiorna solo parti di una finestra in base alla richiesta, può essere utile per visualizzare gli aggiornamenti in qualsiasi momento. In alcuni casi, anche in assenza di animazioni nell'applicazione, le aree continueranno a essere aggiornate. Le opzioni seguenti consentono di visualizzare i comportamenti di aggiornamento. Gli aggiornamenti non necessari sono particolarmente importanti in scenari con desktop remoto, macchine virtuali e simili, quando WPF deve inviare nuove bitmap attraverso la rete. Inoltre, gli aggiornamenti non necessari possono influire sulla durata della batteria dei portatili.
Opzione |
Descrizione |
Note |
---|---|---|
Show dirty-region update overlay |
Consente di indicare tramite ricolorazione ogni aggiornamento apportato da WPF sullo schermo. In questo modo è possibile visualizzare dove e quando vengono ridisegnate le aree in un'applicazione. |
Dato che WPF aggiorna solo parti della finestra in base alla richiesta, può essere utile per visualizzare in quale proporzione viene aggiornata la finestra in qualsiasi momento. Usare questa opzione quando la frequenza dei fotogrammi e la frequenza di aggiunta di rettangoli dirty sono diverse da zero, ma nessun oggetto visivo cambia nell'applicazione. |
Disable dirty region support |
Consente a WPF di ridisegnare l'intera finestra ogni volta che viene apportata una modifica. |
Questa opzione è utile per forzare l'aggiornamento dell'intera finestra. In genere, viene ridisegnata solo la parte della finestra modificata. L'abilitazione di questa opzione rallenta notevolmente il rendering dell'applicazione. |
Clear back-buffer before rendering |
Cancella le finestre dell'applicazione prima di ogni operazione di disegno. |
Questa opzione è un'alternativa a Show dirty-region update overlay. Viene mostrata effettivamente l'area dirty più recente, mentre la sovrapposizione di aggiornamento dell'area dirty è più utile per visualizzare le modifiche apportate all'area dirty nel corso del tempo. |
Rilevamento di altre fonti di riduzione delle prestazioni
Perforator consente di disabilitare particolare operazioni intensive a livello di prestazioni per determinare se siano causa di colli di bottiglia nell'applicazione. Monitorando la frequenza dei fotogrammi delle applicazioni e selezionando singolarmente queste opzioni, è possibile determinare se le operazioni, ad esempio il rendering 3D o il ridimensionamento delle immagini, causano problemi di rendering. Se si seleziona una di queste opzioni e la frequenza dei fotogrammi scende in modo significativo, è stato probabilmente identificato il collo di bottiglia nell'applicazione.
Opzione |
Descrizione |
Note |
---|---|---|
Disable Opacity Effects |
Disabilita determinati usi dell'opacità con effetti potenzialmente notevoli sulle prestazioni. |
Per evitare questo problema di prestazioni in generale, prendere in considerazione la possibilità di impostare l'opacità su un oggetto di basso livello, ad esempio Brush, invece di un oggetto di alto livello, ad esempio Button. |
Disable per-primitive software fallback |
Disabilita il fallback software per singole primitive di rendering. Non è possibile disabilitare le destinazioni di rendering intermedie software e altri rendering software. |
Nella maggior parte dei casi, questa opzione non è necessaria. Mantenerla deselezionata. |
Disable high-quality image rescaling |
Disabilita il ridimensionamento di immagini di grandi dimensioni a dimensioni inferiori. |
Consente di visualizzare l'effetto del ridimensionamento delle immagini nell'applicazione. Se la selezione di questa opzione consente di ridurre in modo significativo la frequenza dei fotogrammi, valutare la possibilità di decodificare le immagini in una dimensione prossima a quella di visualizzazione. |
Disable 3D rendering |
Disabilita tutte le operazioni di rendering 3D. |
Consente di visualizzare l'effetto delle operazioni di rendering 3D nell'applicazione. |
Visual Profiler
Visual Profiler è uno strumento di profilatura delle prestazioni dei servizi WPF, quali layout, rendering e animazione, per gli elementi nella struttura ad albero visuale. Analizzando l'output di profilatura di questo strumento, è possibile determinare quali elementi visivi nell'applicazione potrebbero causare colli di bottiglia delle prestazioni.
Visual Profiler presenta i problemi di prestazioni nel contesto dei blocchi predefiniti di base usati per costruire le scene visive nell'applicazione. Tali blocchi predefiniti includono oggetti di alto livello, come i controlli Button e TextBlock, nonché oggetti di basso livello, come gli elementi Line e Ellipse. Invece di descrivere i problemi di prestazioni in termini di grafici delle chiamate di nomi di funzioni, Visual Profiler descrive questi problemi tramite la rappresentazione di oggetti visivi. La modalità è simile a quella usata dallo strumento Windows SDK, UI Spy, per rappresentare le informazioni. Per altre informazioni, vedere UISpy.exe (UI Spy).
Uso di Visual Profiler
Per usare Visual Profiler, avviare l'applicazione WPF che si desidera analizzare. Una volta avviata l'applicazione, fare clic sulla scheda Visual Profiler fare clic sul menu Azioni e quindi su Select Process. Nella finestra di dialogo Select Process selezionare il processo dell'applicazione che si desidera analizzare e quindi fare clic su Select. Il nome e l'ID del processo verranno visualizzati nella parte superiore della scheda Visual Profiler.
Per analizzare la portata dei problemi di prestazioni WPF, è necessario comprendere il ruolo e l'ambito dei servizi WPF sottostanti. Questi servizi includono layout, rendering e animazione. Visual Profiler fornisce una rappresentazione grafica della modalità di allocazione dei servizi WPF tra gli oggetti dell'applicazione. Ad esempio, quando Visual Profiler visualizza la struttura ad albero visuale degli oggetti dell'applicazione, sovrappone diverse sfumature di rosso sugli oggetti per rappresentare la quantità relativa di risorse usate dall'oggetto. Un oggetto visualizzato con una sovrapposizione di colore rosso più scura rappresenta un oggetto che usa una percentuale più elevata di risorse rispetto a un oggetto con una sovrapposizione di colore rosso più chiara. Ancora più importante, Visual Profiler offre una suddivisione della quantità di risorse WPF specifiche usate da un oggetto.
L'illustrazione seguente mostra l'interfaccia utente di Visual Profiler.
Interfaccia utente di Visual Profiler
L'interfaccia utente di Visual Profiler è suddivisa in otto aree.
Casella di ricerca nella struttura ad albero degli elementi
Struttura ad albero visuale degli elementi
Dettagli e anteprima degli elementi
Dettagli sull'uso della CPU esclusivo degli elementi
Dettagli sull'uso della CPU dell'applicazione
Controllo zoom per i dati acquisiti
Impostazioni di visualizzazione del grafico cronologico
Opzioni per l'anteprima dell'applicazione e la sovrapposizione delle prestazioni
Nelle sezioni seguenti viene descritta ogni area.
Casella di ricerca nella struttura ad albero degli elementi
La casella di ricerca nella sezione Element Tree offre la possibilità di cercare elementi nella struttura ad albero degli elementi dell'applicazione. Quando si esegue una ricerca, tutti gli elementi corrispondenti vengono evidenziati in giallo. È possibile cercare gli elementi in base al tipo o al nome.
Struttura ad albero visuale degli elementi
Il controllo struttura ad albero nella sezione Element Tree visualizza il tipo e il nome degli elementi visivi nell'applicazione insieme alle dimensioni del sottoalbero e ai dettagli del layout.
Di seguito viene riportato un esempio di etichetta di un elemento nella struttura ad albero.
Border 'border1' (26) 0,02% (I)/ 0,00 % (E) - 0,24 ms (I) / 0,00 ms (E)
Parte dell'etichetta dell'elemento |
Descrizione |
---|---|
Border |
Tipo dell'elemento. |
'border1' |
Nome dell'elemento. |
(26) |
Dimensioni del sottoalbero. |
0,02% (I) |
Percentuale della dimensione totale per la struttura ad albero inclusiva, ovvero dell'elemento e tutti i relativi discendenti. |
0,00 (E) |
Percentuale degli elementi totali solo per l'elemento. |
0,24 ms (I) |
Tempo in millisecondi per il layout dell'elemento e dei relativi discendenti. |
0,00 ms (E) |
Tempo in millisecondi per il layout solo dell'elemento. |
Usare il menu View per decidere se visualizzare informazioni inclusive, percentuali esclusive e di tempo.
Fare clic con il pulsante destro del mouse su un elemento per espandere o comprimere il sottoalbero. È inoltre possibile espandere il relativo percorso critico. Il percorso critico indica l'elemento nel sottoalbero che usa la maggiore quantità di CPU nel sottoalbero.
Dettagli e anteprima degli elementi
Nella sezione Element Information vengono visualizzati il tipo e il nome dell'elemento selezionato, se tale elemento è denominato. È inoltre disponibile un'anteprima dell'elemento nella sezione Preview. Se viene selezionato il primo livello, nella sezione viene visualizzata un'anteprima dell'applicazione.
Dettagli sull'uso della CPU esclusivo degli elementi
Nella sezione Element Exclusive CPU Usage vengono visualizzati un grafico cronologico e dettagli sul tempo di CPU esclusivo usato dall'elemento selezionato nel corso del tempo. Ad esempio, un elemento potrebbe dedicare x% di tempo della CPU alla disposizione del layout, y% alla misurazione del layout e z% al rendering.
Dettagli sull'uso della CPU dell'applicazione
Nella sezione Application CPU Usage vengono visualizzati un grafico cronologico e dettagli degli eventi dell'applicazione. Visual Profiler rimane in ascolto e acquisisce vari eventi dell'applicazione. Gli eventi dell'applicazione vengono elencati con valori assoluti e il grafico cronologico mostra con diversi colori il tempo di CPU dedicato a ogni evento dell'applicazione nel corso del tempo. Ciò consente di confrontare facilmente il tempo dedicato dall'applicazione al layout e al rendering.
Nella tabella seguente vengono descritti gli eventi dell'applicazione rappresentati nel grafico.
Nota
Gli eventi corrispondenti a chiamate di metodi in WPF sono rappresentati dal nome del metodo seguito dal nome della classe tra parentesi.Ad esempio, Tick (TimeManager) rappresenta il metodo TimeManager.Tick.
Eventi dell'applicazione |
Descrizione |
---|---|
Unlabeled Time |
Tempo usato in WPF non incluso nella categoria di un altro evento dell'applicazione. Tutto il tempo usato dall'applicazione al di fuori di WPF. |
RenderMessageHandler (MediaContext) |
Si verifica all'avvio del passaggio di rendering. Questo evento causa tra l'altro tick del gestore del tempo. |
Rendering Thread |
Si verifica durante l'esecuzione di istruzioni di rendering nel thread di rendering. Ciò risulta utile per il rilevamento di applicazioni associate al rendering. |
Layout |
Si verifica durante il passaggio di misurazione, disposizione e rendering. |
UpdateRealizations |
Si verifica durante l'aggiornamento delle rappresentazioni bitmap interne degli effetti di testo e bitmap. |
Tick (TimeManager) |
Si verifica durante il tick dell'animazione. Questo evento può attivare il gestore di rendering dell'animazione. Quando si applicano animazioni agli oggetti in WPF, un gestore del tempo gestisce gli oggetti Clock per le sequenze temporali. Il gestore del tempo è la radice di una struttura ad albero di oggetti Clock e controlla il flusso di tempo nella struttura. Viene creato automaticamente un gestore del tempo per ogni applicazione WPF ed è invisibile per lo sviluppatore dell'applicazione. Il gestore del tempo genera "tick" molte volte al secondo. Il numero effettivo di tick generati ogni secondo varia a seconda delle risorse di sistema disponibili. |
AnimatedRenderMessageHandler (MediaContext) |
Si verifica per l'elaborazione e gli aggiornamenti delle animazioni. Quando sono abilitate le animazioni, questo gestore elabora e aggiorna l'animazione, determinando la modifica delle proprietà e l'esecuzione del rendering. |
Render (MediaContext) |
Si verifica durante il passaggio di rendering. Questo metodo chiama infine il metodo OnRender di ogni elemento e risulta utile per comprendere il costo totale di OnRender per tutti gli elementi. Questo evento corrisponde al metodo MediaContext.Render in un file di Visual Studio Profiler (VSP). |
Controllo zoom per i dati acquisiti
La sezione Graph Options include un controllo zoom per i dati acquisti. Trascinando il punto di controllo della finestra di zoom, è possibile ridimensionare e modificare l'asse temporale dei grafici cronologici Element Exclusive CPU Usage e Application CPU Usage.
Impostazioni di visualizzazione del grafico cronologico
La sezione Graph Options include pulsanti di opzione e un dispositivo di scorrimento per regolare le impostazioni dei grafici cronologici. È possibile usare i pulsanti di opzione per specificare il comportamento dell'asse della CPU, ovvero l'asse verticale, e se vengono visualizzati pesi assoluti o relativi. È possibile usare il dispositivo di scorrimento per impostare un valore massimo visualizzato per il grafico.
Opzioni per l'anteprima dell'applicazione e la sovrapposizione delle prestazioni
La sezione Control Options contiene tre interruttori che consentono di eseguire le azioni seguenti.
Fare clic sul primo interruttore per sospendere o avviare la raccolta dati di Visual Profiler.
Fare clic sull'interruttore Live Preview per visualizzare un'anteprima dinamica dell'applicazione nella sezione Preview.
Fare clic sull'interruttore Overlay Window per aggiungere un bordo giallo attorno all'elemento visivo selezionato. Per gli elementi che usano la maggior parte del tempo di CPU viene inoltre aggiunta una sovrapposizione di colore rosso. Lo stesso colore rosso viene usato per l'elemento nella sezione Element Tree. L'intensità del rosso è correlata all'uso della CPU.
Vedere anche
Concetti
Altre risorse
Ottimizzazione delle prestazioni di applicazioni WPF
Livelli di rendering della grafica
Cenni preliminari sul rendering della grafica WPF
Novità degli strumenti di profilatura delle prestazioni per WPF