Quali sono alcuni buoni profilatori .NET?


374

Quali profili hai usato quando hai lavorato con i programmi .net e quali consiglieresti in particolare?

Risposte:


285

Ho usato ampiamente JetBrains dotTrace e Redgate ANTS . Sono abbastanza simili per caratteristiche e prezzo. Entrambi offrono utili profili di prestazioni e profili di memoria piuttosto basilari.

dotTrace si integra con Resharper, il che è davvero conveniente, in quanto è possibile profilare le prestazioni di un test unitario con un clic dall'IDE. Tuttavia, dotTrace sembra spesso dare risultati spuri (ad esempio dicendo che un metodo ha richiesto diversi anni per essere eseguito)

Preferisco il modo in cui ANTS presenta i risultati della profilazione. Ti mostra il codice sorgente e alla sinistra di ogni riga ti dice quanto tempo ci vuole per essere eseguito. dotTrace ha solo una vista ad albero.

Il profiler EQATEC è abbastanza semplice e richiede di compilare versioni strumentate speciali dei vostri assiemi che possono essere eseguite nel profiler EQATEC. È, tuttavia, gratuito.

Nel complesso preferisco ANTS per la profilazione delle prestazioni, sebbene se si utilizza Resharper, l'integrazione di dotTrace è una funzione killer e significa che batte ANTS in termini di usabilità.

Il profiler gratuito di Microsoft CLR ( .Net framework 2.0 / .Net Framework 4.0 ) è tutto ciò che serve per la creazione di profili di memoria .NET.

Aggiornamento 2011:

Il profiler di memoria Scitech ha un'interfaccia utente piuttosto semplice ma molte informazioni utili, tra cui alcune informazioni sulla memoria non gestita di cui dotTrace e ANTS mancano - potresti trovarlo utile se stai eseguendo l'interoperabilità COM, ma devo ancora trovare un profiler che renda COM problemi di memoria facili da diagnosticare: di solito è necessario esplodere windbg.exe.

Il profiler ANTS ha fatto passi da gigante negli ultimi anni, e il suo profiler di memoria ha alcune funzioni veramente utili che ora lo hanno spinto davanti a dotTrace come pacchetto nella mia stima. Ho la fortuna di avere licenze per entrambi, ma se hai intenzione di acquistare un profiler .Net sia per prestazioni che per memoria, rendilo ANTS.


5
Il profiler in Visual Studio è anche molto facile da usare, Visual Studio 2010 è in beta e quindi è anche gratuito. Nel 2010 sono stati apportati numerosi miglioramenti per la visualizzazione di contesa e concorrenza. provalo ...
Rick,

15
@Rick Purtroppo il profiler di Visual Studio non è presente in Professional Edition ...
Drake,

Non sono assolutamente d'accordo sul fatto che il profiler CLR sia tutto ciò di cui hai bisogno per la creazione di profili di memoria .NET, anche se è probabilmente vero se non dai valore al tuo tempo. Vedi la mia risposta di seguito per un riepilogo dei migliori due profili di memoria: ti aiuteranno a trovare perdite di memoria e potenziali problemi molto più velocemente.
Ben Robbins,

1
Le versioni attuali del profiler EQUATEC non sono più gratuite.
David Schmitt,

1
Sembra che EQATEC Profiler sia diventato di nuovo gratuito per .NET (framework completo)
soren.enemaerke

88

Altri hanno coperto il profilo delle prestazioni, ma per quanto riguarda il profilo della memoria sto attualmente valutando sia Scitech .NET Memory Profiler 3.1 sia ANTS Memory Profiler 5.1 (versioni attuali a settembre 2009). Ho provato JetBrains uno o due anni fa e non era buono come ANTS (per la profilazione della memoria), quindi questa volta non mi sono preoccupato. Dalla lettura dei siti Web sembra che non abbia le stesse funzionalità di profilazione della memoria delle altre due.

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

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

Funzionalità comuni di ANTS e Scitech .NET Memory Profiler

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

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 vivi e oggetti che vengono mantenuti in vita solo da un riferimento da un oggetto disposto. Questa è probabilmente la caratteristica killer di ANTS: trovare perdite è incredibilmente veloce per 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 interpretarle in ANTS.
  • Mostra le dimensioni con i bambini oltre alle dimensioni dell'oggetto stesso (ma solo quando sfortunatamente viene selezionata un'istanza, non nell'elenco generale delle classi).
  • 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 allocato l'oggetto. Questo è davvero utile per gli oggetti che sono allocati in molti luoghi diversi. Con ANTS è difficile determinare esattamente dove è stato creato l'oggetto trapelato.
  • Mostra il conteggio degli oggetti usa e getta che non sono stati eliminati. Sebbene non sia indicativo di una perdita, identifica le opportunità per risolvere questo problema e migliorare le prestazioni dell'applicazione a seguito di una garbage collection più veloce.
  • Opzioni di filtro più dettagliate (è possibile filtrare indipendentemente più colonne).
  • Presenta informazioni sul totale degli oggetti creati (inclusi i rifiuti raccolti). ANTS mostra solo le statistiche degli oggetti 'live'. Ciò semplifica l'analisi e l'ottimizzazione delle prestazioni complessive dell'applicazione (ad es. Identificare dove molti oggetti vengono creati inutilmente e che non presentano necessariamente perdite).

A titolo di riepilogo, penso che ANTS ti aiuti a trovare ciò che perde più velocemente mentre Scitech fornisce un po 'più di dettaglio sulle prestazioni complessive della memoria dell'applicazione e sui singoli oggetti una volta che sai cosa guardare (ad es. Stack stack al momento della creazione). Se la traccia dello stack e il tracciamento di oggetti usa e getta non sovrapposti fossero aggiunti ad ANTS non vedrei la necessità di usare nient'altro.


La versione 4.0 di .NET Memory Profiler (ora in anteprima) ora ha una vista grafica. Questa era l'unica caratteristica che mi piaceva nel profiler ANTS che Scitech non aveva (in 3.1 / 3.5).
complotta il

45

Di recente ho scoperto EQATEC Profiler http://www.eqatec.com/tools/profiler . Funziona con la maggior parte delle versioni .NET e su un sacco di piattaforme. È facile da usare e parti di esso sono gratuite, anche per uso commerciale.


Non riesce anche nelle chiamate di coda :( Segnalato bug.
leppie,

Questo è gratuito solo per uso non commerciale.
Jon Seigel,

7
Era completamente gratuito nel mese di agosto '08 quando TrolleFar scrisse la sua risposta. Ora, come dice Jon, è gratuito solo per uso non commerciale.
Richard Flamsholt,

8
Si scopre che hanno cambiato di nuovo le condizioni di licenza. Alcune parti sono nuovamente gratuite per uso commerciale.
Trolle,

A partire dalla FEB2011 la normale edizione .NET per auto / commerciale è gratuita. Questo strumento è utile perché funziona sul modello client / server e può profilare / by-passare i limiti ripetuti (ad esempio Native-> COM-> NET-> COM-> NET può essere profilato). L'interfaccia utente è piuttosto terribile però :-)

31

[ Divulgazione completa ]

Sebbene non sia ancora completo come alcuni degli altri profili di memoria .NET elencati qui, c'è una nuova voce sul mercato chiamata JustTrace . È realizzato da Telerik e il suo obiettivo principale è rendere la traccia / profilazione più semplice e veloce da eseguire per tutti i tipi di app (web / Silverlight / desktop).

Se hai mai trovato la profilazione e l'ottimizzazione intimidatorie o lente con altri strumenti, allora JustTrace potrebbe valere la pena dare un'occhiata.


12
Quando vado a scaricarlo e provarlo, Telerik vuole che io "registri" e "crei un account". E tutti quei pulsanti di iscrizione alla newsletter sono contrassegnati per impostazione predefinita. Sarei felice di provare JustTrace, ma non se Telerik lo rende così difficile.
Ryan Lundy

1
Grazie per averci provato, Kyralessa. Sappiamo che il processo può essere migliorato. Ci stiamo lavorando proprio ora. Speriamo di rimuovere presto questi ostacoli. Per ora, deseleziona le caselle e in 2 minuti puoi avere un account e scaricare JustTrace gratuitamente. Ci scusiamo per il problema a breve termine. -T
Todd

9
post indietro e fammi sapere quando posso scaricare senza creare un account, e ci proverò.
Ryan Lundy

4
Aggiornamento: oggi sono stato in grado di scaricare utilizzando il link nella risposta senza dover creare un account.
Ryan Lundy

25

Non dimenticare nProf - un profiler perfettamente perfetto, freeware.


3
Sembra un po 'abbandonato ... solo una versione alfa del 2006 :-(
Mauricio Scheffer,

2
Ha funzionato alla grande per me. Ora è un progetto Google Code. Rilasciato a luglio 2009.
Utente 1

19
La pagina nProf ora afferma: NProf non è più attivamente sviluppato. Se stai cercando un profiler .NET open source, dai un'occhiata a SlimTune ( code.google.com/p/slimtune )
Richard Ev





9

Ho lavorato con JetBrains dotTrace per WinForms e app per console (non ancora testato su ASP.net) e funziona abbastanza bene:

Recentemente hanno anche aggiunto una "Licenza personale" che è significativamente più economica di quella aziendale. Tuttavia, se qualcun altro ne conosce alcuni più economici o addirittura gratuiti, mi piacerebbe sentire anche :-)


7

Non dimenticare il fantastico profiler di memoria scnet .net

È ottimo per rintracciare perché l'app .net sta esaurendo la memoria.


1
Strumento molto bello. Facile da usare e ti consente di navigare attraverso il grafico degli oggetti. Mi piace soprattutto il tracciamento della memoria "in tempo reale". Ti mostra come si sviluppano i conteggi degli oggetti durante il runtime dell'applicazione.
LowLider

5

Vorrei aggiungere che la capacità di dotTrace di diff memoria e sessioni di performance performance è assolutamente inestimabile (ANTS potrebbe anche avere una funzione di diff di memoria, ma non ho visto una differenza di performance).

Essere in grado di eseguire una sessione di profilazione prima e dopo una correzione o un miglioramento dei bug, quindi confrontare i risultati è incredibilmente prezioso, soprattutto con un'applicazione .NET legacy mastodontica (come nel mio caso) in cui le prestazioni non sono mai state una priorità e dove potrebbero essere i colli di bottiglia MOLTO noioso. Fare un diff prima e dopo ti permette di vedere il cambiamento nel conteggio delle chiamate per ciascun metodo e la modifica della durata per ciascun metodo .

Ciò è utile non solo durante le modifiche al codice, ma anche se si dispone di un'applicazione che utilizza un database diverso, ad esempio, per ciascun cliente / cliente. Se un cliente si lamenta della lentezza, è possibile eseguire una sessione di profilazione utilizzando il proprio database e confrontare i risultati con un database "veloce" per determinare quali operazioni contribuiscono alla lentezza. Naturalmente ci sono molti strumenti per le prestazioni sul lato database, ma a volte mi aiuta davvero a vedere le metriche delle prestazioni dal lato dell'applicazione (dal momento che è più vicino a ciò che l'utente vede effettivamente).

In conclusione: dotTrace funziona alla grande e il diff è inestimabile.


4

AQTime è ragionevole, ma ha un po 'di una curva di apprendimento e non è facile da usare come quello integrato in Team Suite



3

L'attuale versione di SharpDevelop (3.1.1) ha un buon profiler integrato. È abbastanza veloce e si integra molto bene nell'IDE SharpDevelop e nel suo corridore NUnit. I risultati vengono visualizzati in uno stile ad albero / elenco flessibile (utilizzare LINQ per creare la propria selezione). Fare doppio clic sul metodo visualizzato passa direttamente al codice sorgente.


2

Ho lavorato con il profiler di RedGate in passato. Ha fatto il lavoro per me.


2

Non l'ho provato da solo, ma forse dotTrace ? La loro applicazione ReSharper è sicuramente buona. Forse dotTrace è troppo :)


1
Ho usato dotTrace e posso consigliarlo.
Jon Skeet,

2

Dubito che il profiler fornito con Visual Studio Team System sia il miglior profiler, ma l'ho trovato abbastanza buono in molte occasioni. Di cosa hai bisogno in particolare oltre a ciò che offre VS?

EDIT: Sfortunatamente è disponibile solo in VS Team System, ma se hai accesso a ciò vale la pena dare un'occhiata.


1
Stavo parlando di quello in VS2008, ma potrebbe non essere disponibile in tutte le versioni (sto usando VSTS). Dai video PDC2008 sembra che il profiler migliorerà molto in VS2010.
Brian Rasmussen,

1
Tale profiler è disponibile solo con le versioni Team Visual di Visual Studio.
Chris Brandsma,

Visual Studio Team System (Developer Edition) ha un profiler. Vedi < microsoft.com/visualstudio/en-us/products/teamsystem/… >.
gix

Visual Studio ha un profiler dal VS 2005. È disponibile solo con Team System. Questo è, in effetti, il motivo per cui utilizzo il sistema di gruppo (al lavoro ho un professionista). È un ottimo profiler, secondo me.
configuratore

È un ottimo profiler, ma non è del tutto conforme allo standard della nuova versione di ANTS.
mqp

2

L'ultima versione del profiler di memoria ANTS (penso che sia 5) è semplicemente incredibile !!! Stavo perseguitando una perdita usando WinDbg e SOS poiché si era dimostrato il modo migliore prima, poi ho provato ANTS e l'ho ottenuto in pochi minuti. Davvero un software meraviglioso.


2

Vorrei aggiungere yourkit java e .net profiler, lo adoro per Java, ma non ho provato la versione .NET.


1

Sfortunatamente la maggior parte dei profiler che ho provato ha fallito quando usato con le chiamate di coda, in particolare ANTS. Finisco solo per scrivere il mio. Esiste una semplice implementazione su CodeProject che puoi utilizzare come base.



1

Devo portare uno strumento fantastico alla tua notifica che ho usato qualche tempo fa. AVICode Interceptor Studio . Nella mia precedente azienda abbiamo usato questo meraviglioso strumento per profilare l'applicazione Web ( si suppone che sia la più grande applicazione Web al mondo e il più grande progetto IT civile mai realizzato ). Il team delle prestazioni ha fatto miracoli con l'aiuto di questo magnifico strumento. Configurarlo è una seccatura, ma si tratta di un'attività una tantum e direi che ne vale la pena. Dai un'occhiata a questa pagina per i dettagli.

Grazie James


1

Per me SpeedTrace è lo strumento migliore sul mercato perché non solo ti aiuta a trovare i colli di bottiglia all'interno delle tue applicazioni. Ti aiuta anche nella risoluzione dei problemi per scoprire perché l'applicazione si è arrestata in modo anomalo, l'installazione non è stata installata, l'applicazione è stata bloccata, le prestazioni dell'applicazione a volte sono scarse a seconda dell'input dei dati, ad esempio per identificare transazioni db lente.


1

Di recente ho testato il JustTrace di Telerik e sebbene sia ben lontano da un prodotto finito, i ragazzi stanno andando nella giusta direzione.


1

Se la licenza è un problema, puoi provare WINDBG per la creazione di profili di memoria


1

Il profiler NuMega True Time vive in DevPartner Studio di Micro Focus. Fornisce dettagli a livello di linea e metodo per le app .NET che richiedono solo PDB, non è necessaria alcuna fonte (ma aiuta.) Può discriminare tra routine algoritmicamente pesanti rispetto a quelle con lunghe attese di I / O utilizzando il nostro driver di temporizzazione in modalità kernel per thread proprietario. La versione 10.5 viene fornita con il nuovo supporto per 64 processi il 4 febbraio 2011. Spina spudorata: lavoro sulla linea di prodotti DevPartner. Seguire su http://www.DevPartner.com per le notizie sul lancio del 10.5.

Disclaimer: sono il Product Manager di DevPartner presso Micro Focus.


benvenuto in SO. Dovrai rivelare qualsiasi relazione con DevPartner o verrai considerato uno spammer e trattato come tale. Vedo che hai risposto a una serie di domande di profilazione ...
John Saunders,

0

Ho riscontrato molti problemi in una grande app C # usando questo .

Di solito il problema si verifica durante l'avvio o l'arresto durante il caricamento dei plug-in e la creazione, distruzione, serializzazione o deserializzazione di strutture di big data. Spesso vengono creati e inizializzati più di una volta e i gestori delle modifiche vengono aggiunti più volte, aggravando ulteriormente il problema.

In casi come questo, il programma può essere così lento che sono sufficienti solo 2 campioni per individuare i siti di chiamata di metodo / funzione / proprietà colpevoli.


0

Abbiamo selezionato YourKit Profiler per .NET nella mia azienda perché era il miglior rapporto qualità / prezzo. Per una piccola azienda che vuole avere una licenza flessibile (licenze fluttuanti) è stata una scelta perfetta: all'epoca ANTS era il medaglione dei posti degli sviluppatori.

Inoltre, ci ha fornito la possibilità di collegarci al processo in esecuzione, cosa impossibile con dotTrace. Fai attenzione, tuttavia, che il collegamento non sia l'opzione migliore poiché tutto ciò rallenterà .NET, ma era l'unico modo per profilare le applicazioni .NET avviate da altri processi. Per quanto riguarda le funzionalità, ANTS e dotTrace erano migliori, ma alla fine YourKit era abbastanza buono.


A partire da gennaio 2012, YourKit ha aumentato i prezzi per il profiler YourKit. Pertanto, il vantaggio del prezzo potrebbe non essere più valido.

0

Se usi ASP.NET MVC, puoi provare MVCMiniProfiler (http://benjii.me/2011/07/using-the-mvc-mini-profiler-with-entity-framework/)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.