Strumenti di profilo di memoria .NET

Possibile duplicato:
Quali sono alcuni buoni profilatori .NET?

Sono alla ricerca di buoni strumenti di profilatura della memoria .NET CLR.

Il mio requisito fondamentale è che funzionerà bene con IIS e le CLR standalone. Idealmente vedrei quali oggetti sono allocati, dove sono allocati e quali dimensioni sono?

Qualcuno ha qualche buona esperienza con uno strumento particolare che sarebbe felice di raccomandare?

    Sto attualmente valutando Scitech .NET Memory Profiler 3.1 e ANTS Memory Profiler 5.1 . Ho provato i JetBrains uno o due anni fa e non era buono come ANTS quindi non mi sono preoccupato di questa volta. Dalla lettura dei siti web sembra che non sia buono per il profiling della memoria come gli altri due.

    Sia ANTS che il profiler di memoria Scitech hanno caratteristiche che l’altro non ha, quindi quale è il migliore dipenderà dalle tue preferenze. In generale, lo Scitech fornisce informazioni più dettagliate mentre l’ANTS è davvero incredibile nell’identificare l’object che perde. Nel complesso, preferisco l’ANTS perché è così veloce nell’individuare possibili perdite.

    Ecco i principali pro e contro di ciascuno dalla mia esperienza:

    Funzioni comuni di ANTS e Scitech .NET Memory Profiler

    • Funzionalità di analisi in tempo reale
    • Video di istruzioni eccellenti sui loro siti web
    • Facile da usare
    • Ragionevolmente performante (ovviamente più lento che senza il profiler allegato, ma non così tanto da diventare frustrato)
    • Mostra le istanze di oggetti che perdono
    • Fondamentalmente entrambi fanno il lavoro abbastanza bene

    ANTS

    • Filtri con un clic per trovare perdite comuni, tra cui: oggetti mantenuti in vita solo dai gestori di eventi, oggetti che sono disposti ma ancora in vita e oggetti che vengono mantenuti in vita solo da un riferimento da un object disposto. Questa è probabilmente la caratteristica killer di ANTS – trovare perdite è incredibilmente veloce a causa di questo. Nella mia esperienza, la maggior parte delle perdite è causata dal fatto che i gestori di eventi non vengono sganciati e ANTS ti porta direttamente a questi oggetti. Eccezionale.
    • Grafico di conservazione degli oggetti Mentre le stesse informazioni sono disponibili in Scitech, è molto più facile da interpretare in ANTS.
    • Mostra le dimensioni con i bambini oltre alla dimensione dell’object stesso (ma solo quando un’istanza è selezionata, sfortunatamente, non nell’elenco generale della class).
    • Migliore integrazione con Visual Studio (tasto destro del mouse sul grafico per passare al file)

    Scitech .NET Memory Profiler

    • Mostra la traccia dello stack quando è stato assegnato l’object. Questo è veramente utile per oggetti che sono allocati in molti posti diversi. Con ANTS è difficile determinare esattamente dove è stato creato l’object trapelato.
    • Mostra il conteggio di oggetti usa e getta non disposti. Pur non indicando una perdita, identifica le opportunità per risolvere questo problema e migliorare le prestazioni dell’applicazione come risultato di una raccolta dei dati più rapida.
    • Opzioni di filtro più dettagliate (diverse colonne possono essere filtrate indipendentemente).
    • Presenta informazioni sugli oggetti totali creati (compresi i dati raccolti). ANTS mostra solo statistiche di oggetti “live”. Ciò semplifica l’analisi e la messa a punto delle prestazioni complessive delle applicazioni (ad esempio, identifica dove vengono creati inutilmente molti oggetti che non necessariamente perdono).

    A titolo di sintesi, ritengo che ANTS ti aiuti a scoprire cosa perde di più velocemente mentre Scitech fornisce un po ‘più di dettagli sulle prestazioni complessive della memoria dell’applicazione e sui singoli oggetti una volta che sai cosa guardare (ad esempio lo stack trace alla creazione). Se la traccia di stack e il tracciamento di oggetti monouso non disposti sono stati aggiunti a ANTS, non vedrei la necessità di utilizzare nient’altro.

    Strano che CLR Profiler non sia menzionato ancora qui. È gratuito e funziona bene.

    Fai attenzione alle diverse vecchie versioni disponibili dal sito di Microsoft. A partire da novembre 2011, l’ultima versione sembra essere questa: ultima versione (collegamento alternativo)

    Se ti senti davvero disperato, puoi utilizzare WinDbg con la libreria Son-of-Strike (SOS.DLL) fornita con il framework .Net.

    Grande fan di JetBrains Profiler me stesso

    .Net Memory Profiler mi ha aiutato molto nel mio precedente progetto. Non è gratuito ma è molto buono.

    .NET Memory Profiler è un potente strumento per trovare perdite di memoria e ottimizzare l’utilizzo della memoria nei programmi scritti in C #, VB.NET o qualsiasi altro linguaggio .NET.

    Attualmente sto usando ANTS Profiler . È uno strumento molto buono con molte opzioni di dettaglio dei profili e funziona bene con applicazioni stand-alone, server di sviluppo e IIS.

    Dal momento che tutti elencano gli strumenti disponibili, ho pensato di indicarti l’elenco completo dei profiler per .NET: http://sharptoolbox.com/categories/profilers-debuggers

    Troverai lì gli strumenti suggeriti qui e tutti gli altri, ognuno con una breve descrizione di ciò che propone.

    Ho usato Aqtime con grande successo nel corso degli anni. Ho provato ANTS e altri, ma sono tornato ad Aqtime in quanto anch’io faccio molto sviluppo nel codice non gestito.