CLR Profiler
Oggi ho finalmente avuto bisogno di usare CLR Profiler. L'avevo già provato in passato, ma usarlo per risolvere un problema reale è tutt'altra faccenda. CLR Profiler analizza l'esecuzione di un assembly .NET e fornisce informazioni sull'uso della memoria (chi, come, quando, da chi viene allocato) e sul grafo di chiamate. Non è uno strumento da usare come profiler per le prestazioni in termini di CPU ma è utilissimo per individuare le cause di un consumo eccessivo di memoria (che direttamente e indirettamente ha i suoi effetti anche sulle prestazioni velocistiche).
Per chi vuole curiosare senza installarlo (anche se è molto piccolo e non invadente), questo episodio su MSDN TV ne illustra le potenzialità.
Se qualcuno vuole usarlo, una lettura obbligata è il documento word contenuto all'interno: 11Mb di Word con molte bitmap ma anche tanto testo per spiegare come sfruttare le capacità di questa utility.
Difetti:
- deve essere avviato con privilegi di amministratore (e non dice nulla se non lo fate, salvo che poi non si comporta correttamente dando un'eccezione o attendendo all'infinito un evento che non si verifica)
- il file di log che genera è in formato ASCII - su un programma che usa intensivamente la memoria diventa molto ingombrante
- l'interfaccia utente è un po' essenziale e manca di help on line... ma questo non è materiale per neofiti quindi ci si può aspettare che uno il manuale lo legga...
Pregi:
- molti grafici e diagrammi diversi che illustrano comportamenti anche complessi difficilmente rappresentabili in forma testuale
- gratis con tanto di sorgenti
- nessun problema di setup (deployment xcopy, insomma)
Resoconto di oggi: ho ridotto la memoria occupata del 30%, passando da 900Mb a 600Mb, ovviamente intervenendo dove meno me lo sarei aspettato. Quello che invece pensavo fosse pesante si è rilevato poco significativo. Ancora una volta, la regola d'oro è: prima di ottimizzare bisogna misurare.