2011-06-21 6 views

risposta

1

Come altri hanno suggerito i profiler di memoria, Memprofiler è sicuramente il più avanzato (ho provato tutti i profiler .NET esistenti). Ha una prova di 14 giorni.

+0

Guardando al processo sembra molto buono! –

3

Informazioni su .NET Memory Profiler di ANTS, ad esempio. Forse CLR Profiler.

0

I nostri team di QA utilizzano http://www.jetbrains.com/profiler/ per questo genere di cose qui quando ci imbattiamo in colli di bottiglia. Sono abbastanza sicuro che ti fornirà un elenco di allocazioni tramite la chiamata al metodo. Vado a installarlo e controllo :)

0

Buona vecchia windbg + sos + pdb farà il dumping. Per quanto riguarda la parte "dove nel codice sorgente sono stati creati" - è impossibile senza strumentazione o iniezione.

3

Le informazioni non sono disponibili se si crea un dump della memoria. Per raccogliere questo, è necessario monitorare il processo mentre è in esecuzione. È possibile avviare l'applicazione tramite WinDbg e impostare i punti di interruzione su tutti i costruttori a cui si è interessati (si spera che non si voglia esaminare ogni singolo oggetto).

Se si crea il punto di interruzione, quindi si esegue il dump dello stack, si avrà il punto di creazione per l'oggetto. Tuttavia, tieni presente che gli oggetti possono spostarsi durante il GC, il che renderà gli oggetti parring con stack difficili (o addirittura impossibili in alcuni casi).

Poiché la domanda è contrassegnata da prestazioni e profilazione, ritengo che si desideri ridurre le allocazioni di memoria. Perché non guardare solo i numeri degli oggetti creati (o magari guardare gli oggetti più grandi creati) guardando l'heap. Quindi passa attraverso il codice sorgente e scopri dove vengono create tali istanze.

1

È necessario un profiler di memoria .NET. Questi strumenti consentono di seguire i grafici degli oggetti sull'heap garbage collocato e possono essere molto utili per identificare le fonti di perdite di memoria. Anche se non necessariamente ti dicono il metodo in cui è stato creato un oggetto, ti diranno quali istanze di quali classi stanno tenendo gli oggetti e ti permetteranno di prendere le differenze di snapshot dell'heap gc. Non richiedono modifiche al codice sorgente. Si consiglia di dare un'occhiata a What Are Some Good .NET Profilers?

Problemi correlati