2010-09-22 10 views
6

alcune parti del mio programma sono molto lente. e mi chiedevo se c'è uno strumento che posso usare e per esempio può dirmi ok, il metodo runningA() ha preso 100ms, ecc ... o informazioni così utili simili a quello.Qualche strumento che indica per quanto tempo ciascun metodo impiega per essere eseguito?

+3

Si chiama [Profiler] (http://stackoverflow.com/search?q= [c% 23] + profiler). – dtb

+1

Quello che stai cercando si chiama profiler. – GrandmasterB

+2

possibile duplicato di [Quali sono alcuni buoni profilatori .NET?] (Http://stackoverflow.com/questions/3927/what-are-some-good-net-profilers) – dtb

risposta

8

Lo spazio dei nomi System.Diagnostics offre una classe utile denominata Stopwatch, che può essere utilizzata per cronometrare parti del codice (pensarlo come un "profiler del povero uomo").

Questo è come si dovrebbe utilizzare:

Stopwatch stopwatch = new Stopwatch(); 
stopwatch.Start(); // Start timing 

// This is what we want to time 
DoSomethingWeSuspectIsSlow(); 

stopwatch.Stop(); 
Console.WriteLine("It took {0} ms.", stopwatch.ElapsedMilliseconds); 
+3

oppure, creare una classe che implementa l'idisposable, che avvia il timer durante la contruction, arresta e scrive su dispose. Quindi puoi cronometrare qualsiasi blocco di codice avvolgendolo con una dichiarazione using! –

+1

Assicurarsi inoltre che il metodo sia stato richiamato almeno una volta prima di cronometrarlo, in modo da non misurare il tempo per la compilazione JIT. –

+0

@ John Gardner - anche il tuo costrutto è utile per ottenere i tempi perf perfetti da un sistema Prod in esecuzione. Accumula i tempi per le parti del workitem con un tag che li identifica e scarica alla fine del workitem. –

3

Quelli tipo di applicazioni sono noti come "profiler"

Ecco un esempio: example

12

Se si utilizza Visual Studio Team System v'è un profiler integrato in 'Performance Tools. C'è un sacco di informazioni utili su questo allo this blog.

L'ho trovato estremamente utile nell'identificare lo 20% of my code that runs 80% of the time e quindi cosa dovrei preoccuparmi dell'ottimizzazione.

Un'altra semplice tecnica che può essere sorprendentemente efficace è eseguire il codice di rilascio nel debugger e interromperlo alcune volte (10 o giù di lì può essere sufficiente) mentre è nello stato "occupato" che si sta tentando di diagnosticare . Potresti trovare informazioni ricorrenti sul callstack che ti indirizzano verso l'area di interesse generale. Ancora una volta, la regola 80/20 in vigore.

+1

+1 Ho usato questo metodo di interrupt da prima che i profiler fossero concepiti. Ero confuso che così poche persone lo sapessero. Direi che in realtà identifica l'area di interesse e la regola 80/20 è più simile a 99.9/0.1 –

+0

Purtroppo, il collegamento 80/20 è particolarmente vacuo. –

+0

@ Mike Dunlavey: ne hai uno migliore? Modificherò in caso affermativo. Grazie –

2

Vedere il nostro SD C# Profiler. Può fornire i tempi delle funzioni della funzione da solo e/o da tutti i suoi calle.

Problemi correlati