Windows SDK: wpfperf e l’irrimediabile crash
ll titolo fa anche (quasi) rima…non è proprio rima…come si dice? Assonanza? Giusto
Torniamo a noi, perchè sono stanco.
Questa sera ho voluto dare un’occhiata al Performance Profiling Tools for Windows Presentation Foundation incluso nel Windows SDK. Si tratta di uno strumento che serve a capire come l’engine di WF spende il suo tempo nelle varie fasi di rendering, layouting (!), gestione degli handler e così via. Causa ingenti impegni sul lavoro, ho solo letto velocemente qualche interessante articolo su MSDN e mi sono messo questa sera a sperimentarlo un pochino.
Ho trovato inizialmente qualche difficoltà, perchè il tool tende a crashare un po’ troppo spesso, se non viene maneggiato con cura. Innanzitutto, per lanciarlo è sufficiente aprire il command prompt del Windows SDK e lanciare da riga di comando wpfperf. La prima cosa che wpfperf ci propone è l’aggiunta di qualche assembly. Da buon ignorante, pensavo di dover puntare il folder della mia applicazione, mentre in realtà non è proprio così. Dunque, procediamo con calma: al primo avvio wpfperf ci propone questa dialog:
Questi sono assembly che wpfperf può utilizzare per profilare la nostra applicazione. La ListBox nella parte inferiore è a selezione multipla, quindi, per esempio, possiamo selezionare il Visual Profiler, l’Event Trace ed il Trace Viewer ed attivarli. Non so bene per quale motivo wpfperf ci chieda queste informazioni: penso che questo tool offra qualche spunto di estensibilità, tale per cui uno sviluppatore possa creare un nuovo assembly per creare propri strumenti di profiling dedicati a WPF.
Se selezioniamo il Visual Profiler, quello che mi è sembrato più interessante, dopo averlo selezionato dalla dialog qui sopra dobbiamo cliccare sul pulsante Start Profiling. Appare un’altra finestra che ci elenca tutte le applicazioni correntemente attive che utilizzano WPF: mentre vi sto scrivendo sto utilizzando Windows Live Writer, e proprio questo software appare in questo elenco. Se volessimo profilarlo, non dobbiamo fare altro che selezionarlo dalla ListBox e cliccare su Ok. Ci ho provato, ma wpfperf crasha irrimediabilmente. E non crasha solo con Windows Live Writer, ma con qualsiasi altra applicazione WPF, tipo il mio Flickr Browser ed altre cose.
Di primo acchito quindi wpfperf non funziona proprio.
Ma non mi sono arreso. Il crash di wpfperf fa riferimento ad un’eccezione FileNotFoundException. Mi sono incuriosito ancora di più, ed in giro sul Web ci sono diversi post sui forum MSDN dove si spiega come risolvere questo problema. Il file che wpfperf cerca e non trova si chiama WpfPerformanceDiagnostics.dll e si trova nella directory bin del Windows SDK (di default è C:Program FilesMicrosoft SDKsWindowsv6.0Bin). Questo assembly va bene lì dov’è, ma non basta: va copiato anche nella stessa directory dove si trova l’assembly che vogliamo profilare. Per evitare che il Visual Profiler di wpfperf crashi inesorabilmente ogni volta che tentiamo di usarlo, quindi, dobbiamo copiare a mano questo assembly nelle varie directory che ci interessano.
Fatto questo, possiamo usare wpfperf per vedere quanto tempo impiega WPF a renderizzare le nostre applicazioni, quanto tempo ci mette a calcolare il layout dei controlli inseriti nei vari panel, quanto tempo passa ad esaminare l’input da tastiera e da mouse, etc. etc. Adesso che funziona, vorrei davvero studiarmelo un pochino.
Mi ero ripromesso di essere rapido, ma anche questa volta non ce l’ho fatta. I’m sorry.
Technorati Tags: wpf programming .NET profiling