2012-06-21 20 views
7

Kodun boyutunu ve yürütme süresinin ne olduğunu bulmanın bir yolu var mı? Böylece iki kodu karşılaştırabilir ve hangisinin daha iyi olduğuna karar verebilirim? ÖrneğinC# Kod boyutu ve Kod yürütme süresi

Bu

Kanunu 1

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

büyüklüğü ve yürütme zamanı bulmak istiyorum diyelim ve 2

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

karar vermek için bu

Kod hangi daha iyi (şimdi bu örnek umurumda değil). Örneğin Sonuç şu olacaktır: Bir dosya boyutunu belirlemek için FileInfo sınıfını (Length özelliğine bakın) kullanabilir

Code 1: 
Size: ? KB 
Time: ? ms 

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

Neden 'sum ++' kullanmıyoruz? 'Add' yerine' inc' kullanır. Ve 'inc' genellikle daha hızlı ... –

+0

* (MSIL çeviri sonra) –

+0

@ColeJohnson Benim tahminim bu bir derleyici/JITter sizin için yapıyor optimizasyon türüdür – Servy

cevap

15

Piyasada ANTS Profiler http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/ (ücretli ürün var ancak Deneme sürümü var) veya başka Profiler ürünleri (ANTS, vTune, OptimizeIt, DevPartner, YourKit, dotTrace) kullanabilirsiniz.

Ayrıca, yürütme süresini (daha hızlı ve daha az pahalı) karşılaştırmak için manuel StopWatch enstrümantasyonunu kullanarak bu 2 işlevi yürüten bazı birim testlerini ayarlayarak işlevleri kendiniz de karıştırabilirsiniz. Birim testleri ayrıca, uygulamayı daha sonra değiştirmeniz gerektiğinde, performans üzerinde herhangi bir regresyona sahip olmamanızı sağlar.

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

Kodu ve tüm ürünleri listelemek için teşekkürler – a1204773

+0

['Stopwatch.StartNew()'] kullanımını önerebilirim (http://msdn.microsoft.com /en-us/library/system.diagnostics.stopwatch.startnew.aspx)? – Adam

2

.

Programı çalıştırmak için ne kadar süreceğini belirlemek için Stopwatch sınıfını kullanabilirsiniz.

+0

Kronometre için teşekkürler ama FileInfo ihtiyaç duyduğum gibi değildi – a1204773

3

http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx Eğer StopWatch kullanmalıdır yürütme zamanı ölçmek için - Birden tekrarlamalar birden çok kez çalıştırmak ve uygun bir kriter istiyorsanız bunları ortalama gerekecektir. Eğer kullanılan birçok bellek profilleyicilerini birini kullanabilirsiniz - -

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

// do a million iterations 

sw.Stop(); 

var time = sw.Elapsed; 

bellek boyutlarda gelince

ANTS memory profiler, dotTrace iki ticari seçeneklerdir.

+0

Ürünler için kod ve ürünler için teşekkür ederiz – a1204773