2012-06-21 21 views
7

C'è un modo per trovare la dimensione di un codice e qual è il suo tempo di esecuzione in modo da poter confrontare due codici e decidere quale è meglio?C# Dimensioni del codice e tempo di esecuzione del codice

Per esempio consente di dire che voglio trovare il tempo dimensioni e l'esecuzione di questo

Codice 1

for(int i=0; i<5; i++) 
{ 
    sum+=1; 
} 

e questo

Codice 2

for(int i=0; i<=4; i++) 
{ 
    sum = sum + 1; 
} 

a decidere quale è meglio (non mi interessa questo esempio ora). Ad esempio, il risultato sarà:

Code 1: 
Size: ? KB 
Time: ? ms 

Code 2: 
Size: ? KB 
Time: ? ms 
+1

Perché non usare solo 'sum ++'? Usa 'inc' invece di' add'. E 'inc' è generalmente più veloce ... –

+0

* (Dopo la traduzione dell'MSIL) –

+0

@ColeJohnson La mia ipotesi è che è il tipo di ottimizzazione che un compilatore/JITter sta facendo per te – Servy

risposta

15

Si potrebbe usare sia ANTS Profiler http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/ (prodotto da pagare ma hanno una versione di prova) o qualche altro prodotto Profiler (ANTS, VTune, Optimizeit, DevPartner, YourKit, dotTrace) sul mercato.

È inoltre possibile inostruire le funzioni da soli impostando alcuni test dell'unità che eseguono queste 2 funzioni utilizzando una strumentazione StopWatch manuale per confrontare i tempi di esecuzione (più rapidi e meno costosi). I test unitari consentono inoltre di garantire che non si abbiano regressioni sulle prestazioni se è necessario modificare l'implementazione in un secondo momento. http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx

var stopWatch = new Stopwatch(); 
    stopWatch.Start(); 
    var result = CallFunction(); 
    stopWatch.Stop(); 
    var executionTime = stopWatch.Elapsed; 
+0

Grazie per il codice e per elencare tutti i prodotti – a1204773

+0

Posso suggerire l'uso di ['Stopwatch.StartNew()'] (http://msdn.microsoft.com /en-us/library/system.diagnostics.stopwatch.startnew.aspx)? – Adam

2

È possibile utilizzare la classe FileInfo (Vedere la proprietà Length) per determinare la dimensione di un file.

È possibile utilizzare la classe Stopwatch per determinare il tempo necessario per eseguire il programma.

+0

Grazie per il cronometro ma FileInfo non era quello che mi serviva – a1204773

3

per misurare il tempo di esecuzione si dovrebbe usare StopWatch - avrete bisogno di eseguire più iterazioni più volte e li mediare se si vuole un punto di riferimento adeguato.

var sw = new StopWatch(); 
sw.Start(); 

// do a million iterations 

sw.Stop(); 

var time = sw.Elapsed; 

Per quanto riguarda in dimensioni di memoria - è possibile utilizzare uno dei tanti profiler di memoria disponibili - ANTS memory profiler, dotTrace sono due opzioni commerciali.

+0

Grazie per il codice e per i prodotti – a1204773

Problemi correlati