2012-06-21 22 views
7

Czy istnieje sposób, aby znaleźć rozmiar kodu i czas jego wykonania, aby móc porównać dwa kody i zdecydować, który z nich jest lepszy?C# Rozmiar kodu i czas wykonania kodu

Na przykład powiedzmy, że chcę, aby znaleźć czas, rozmiar i wykonanie tego

Kodeksu 1

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

i to

Code 2

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

zdecydować, które jest lepszy (teraz nie dbam o ten przykład). Na przykład wynik będzie:

Code 1: 
Size: ? KB 
Time: ? ms 

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

Dlaczego po prostu nie użyć 'sum ++ '? Używa 'inc' zamiast' add'. I "inc" jest ogólnie szybszy ... –

+0

* (Po przetłumaczeniu MSIL) –

+0

@ColeJohnson Domyślam się, że jest to rodzaj optymalizacji, którą kompilator/JITter robi dla ciebie – Servy

Odpowiedz

15

Można użyć ANTS Profiler http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/ (płatny produkt, ale mają wersję próbną) lub innego produktu Profiler (ANTS, vTune, OptimizeIt, DevPartner, YourKit, dotTrace) na rynku.

Funkcje te można również samemu zaprogramować, uruchamiając testy jednostkowe, które wykonują te 2 funkcje za pomocą ręcznego przyrządu StopWatch w celu porównania czasu wykonania (szybszego i tańszego). Testy jednostkowe pozwoliłyby również upewnić się, że nie ma żadnych regresji dotyczących wydajności, jeśli trzeba później zmienić implementację. 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

Dziękuję za kod i za wystawienie wszystkich produktów. – a1204773

+0

Mogę zasugerować użycie ['Stopwatch.StartNew()'] (http://msdn.microsoft.com /en-us/library/system.diagnostics.stopwatch.startnew.aspx)? – Adam

2

Można użyć klasy FileInfo (Zobacz właściwość Length) do określenia rozmiaru pliku.

Możesz użyć klasy Stopwatch, aby ustalić, ile czasu zajmuje uruchomienie programu.

+0

Dziękuję za Stoper, ale FileInfo nie było tym, czego potrzebowałem. – a1204773

3

Aby zmierzyć czas wykonania należy użyć StopWatch - trzeba będzie uruchomić wiele iteracji wielokrotnie i uśrednić je jeśli chcesz właściwego odniesienia.

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

// do a million iterations 

sw.Stop(); 

var time = sw.Elapsed; 

chodzi o rozmiary pamięci - można skorzystać z jednej z wielu profilers dostępnej pamięci - ANTS memory profiler, dotTrace są dwie opcje handlowych.

+0

Dziękujemy za kod i produkty – a1204773