Può sembrare strano, ma anche in codice gestito, qual è quello eseguito dal framework .NET, possiamo avere dei
memory leak, e a tal proposito c'è anche un
articolo Microsoft a riguardo, che elenca quattro motivi che possono causare questo problema. Per fronteggiare il fenomeno, che in ogni caso è d’entità inferiore rispetto a quando questo accade con un eseguibile nativo, può venire in aiuto
.NET Memory Profiler di
SciTech Software, giunto alla versione 3.0.
Le novità dell'ultima uscita sono molto interessanti: è possibile collegarsi ad un processo .NET in esecuzione, tracciare risorse
unmanaged tra cui la memoria, usare handle come HBITMAP e HWND, ed inoltre importare file dump DMP. Queste ultime feature sono disponibili solo nella versione professionale. Attaccarsi ad un processo .NET in esecuzione richiede che nel sistema siano installati gli
strumenti di debugging Microsoft a 32 e a 64 bit, secondo l'applicazione.
In tempo reale si possono ottenere informazioni, graficamente e numericamente, su classi e risorse native, così da poter vedere lo stato dell'heap del
gargabe collector e ottenere un'istantanea di esso, che più tardi può essere confrontata con un'altra
snapshot. Addirittura si può scegliere di visualizzare singoli valori di campi, di specifiche istanze nell'heap. Tutto questo per quanto riguarda un eseguibile .NET, un servizio .NET o un processo ASP.NET se nel sistema vi è almeno il framework .NET 2.0.
C'è poi un
dispose tracker per ottenere informazioni sulle istanze di tipi, che implementano l'interfaccia
IDisposable, che è utilizzata per rilasciare correttamente la memoria occupata da un oggetto; abilitare questa caratteristica introduce un leggero
overhead, così come tracciare l'utilizzo dell'heap stesso.
.NET Memory Profiler può essere integrato in Visual Studio 2003 e 2005, consentendo così il profiling di un’applicazione da dentro l'ambiente di programmazione stesso. In aggiunta ci sono anche delle API per controllare il profiler dal processo sottoposto a profiling.