2010-09-15 11 views
7

Eventuali duplicati:
What Are Some Good .NET Profilers?Strumenti per perdite di memoria a .Net eseguibile

sto cercando di testare un'applicazione in Windows per perdite di memoria. Ho esaminato le alternative Linux (ad esempio Valgrind) e sto cercando uno strumento simile per Windows. Il problema con .Net è che la memoria non viene rilasciata immediatamente come in Linux.

La mia conoscenza di .Net è limitata, quindi il mio problema è che mi piacerebbe utilizzare uno strumento che trovi perdite di memoria per un eseguibile Windows .Net. Idealmente il programma dovrebbe essere in grado di rilevare eventuali perdite di memoria mentre utilizzo l'applicazione. Qualcuno sa di tale strumento o ha qualche suggerimento per risolvere questo problema?

Grazie per qualsiasi aiuto in anticipo.


Grazie per le risposte. Qualcuno può dirmi se qualcuno di questi programmi ti permette di eseguire dalla riga di comando e di generare report di perdita di memoria in un file di testo.

Grazie

risposta

5

Redgate ha una bella profiler di memoria è possibile scaricare here. Viene fornito anche con una prova di 14 giorni. L'ho usato ed è molto buono.

+0

@ Lucas B - Sapete se è possibile eseguire questo utilizzando un argomento della riga di comando automatizzato e l'output in un file di testo. – chrissygormley

+0

sì puoi vedere qui: http://www.red-gate.com/supportcenter/Content.aspx?p=ANTS%20Profiler&c=ANTS_Profiler/help/4.0/AP_startup_parameters.htm&toc=ANTS_Profiler/help/4.0/toc469429.htm –

+0

@ Lucas B - Grazie +1 – chrissygormley

3

Alcuni altri hanno già pubblicato buoni collegamenti con i profiler: il profilo di Redgate è particolarmente buono.

Ecco un link ad un buon articolo sulla ricerca perdite in .Net:

http://blogs.msdn.com/b/ricom/archive/2004/12/10/279612.aspx

Ecco un grande blog - l'autore è un ingegnere supporto a MS (queste persone sono davvero buoni programmatori che funzionano in windebug tutto il giorno per trovare problemi). Molti dei suoi articoli riguardano l'individuazione di perdite di memoria. La maggior parte dei suoi esempi sono asp.net, ma la maggior parte delle tecniche dovrebbero applicarsi a Windows apps così:

http://blogs.msdn.com/b/tess/archive/2006/01/23/516139.aspx

Inoltre, essere consapevoli che si potrebbe non avere una vera e propria perdita. In base alla progettazione, il garbage collector .Net non rilascia immediatamente memoria. Fa raccolte periodiche che sono innescate da vari eventi (non penso che MS abbia pubblicato un elenco completo delle cose che faranno sparire il garbage collector). So che uno dei trigger è in condizioni di memoria insufficiente e un altro trigger può essere un'allocazione di memoria. Se nulla lo fa scattare, il GC non raccoglierà.

Ciò significa che è possibile avviare un'app di Winform .net, lasciarla mangiare un po 'di memoria (e quindi rilasciarla), quindi lasciarla seduta tutta la notte. Se il computer è rimasto inattivo per tutto il tempo, il GC potrebbe non essere stato attivato e l'app potrebbe ancora disporre di molta memoria. Quando qualcosa accade per attivare la raccolta, la memoria verrà liberata. È molto comune che le persone dichiarino che le app .net sembrano lente nel rilasciare memoria come risultato di questo comportamento.

Avanti e profilo: è possibile che si verifichi una perdita, ma tenere presente che questo comportamento potrebbe essere dovuto alla progettazione. Ad ogni modo, buona fortuna!

1

Abbiamo provato molti dei memoryprofilers per.NET e sono giunti alla conclusione che il .NET memory profiler è il migliore attualmente sul mercato con una buona combinazione di facilità d'uso, quantità di dati disponibili e perfomance.

Problemi correlati