2012-06-21 111 views
7

是否有任何方法可以找到代碼的大小以及執行時間是多少,以便我可以比較兩個代碼並確定哪個更好?C#代碼大小和代碼執行時間

例如可以說,我想找到這個

代碼1

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

的大小和執行時間,這

代碼2

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

決定哪些是更好的(我現在不關心這個例子)。例如,結果將是:

Code 1: 
Size: ? KB 
Time: ? ms 

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

爲什麼不使用'sum ++'?它使用'inc'而不是'add'。而'inc'通常更快...... –

+0

*(MSIL翻譯後) –

+0

@ColeJohnson我的猜測是這是編譯器/ JITter爲你做的一種優化 – Servy

回答

15

您可以在市場上使用ANTS Profiler http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/(支付產品,但他們有試用版)或其他一些Profiler產品(ANTS,vTune,OptimizeIt,DevPartner,YourKit,dotTrace)。

您也可以通過設置一些單元測試來執行這些功能,這些單元測試使用手動StopWatch工具來執行這兩個功能,以比較執行時間(更快和更便宜)。如果以後需要更改實現,單元測試還可以確保您不會對性能進行任何迴歸。 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

感謝您的代碼和列出所有產品 – a1204773

+0

我可以建議使用['Stopwatch.StartNew()'](http://msdn.microsoft.com /en-us/library/system.diagnostics.stopwatch.startnew.aspx)? – Adam

2

可以使用FileInfo類(見Length屬性)來確定文件的大小。

您可以使用Stopwatch類來確定運行程序需要多長時間。

+0

謝謝秒錶,但FileInfo不是我所需的 – a1204773

3

來衡量你應該使用StopWatch執行時間 - 你將需要運行多個迭代多次,平均出來,如果你想有一個合適的基準。

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

// do a million iterations 

sw.Stop(); 

var time = sw.Elapsed; 

至於在內存大小 - 您可以使用許多可用的內存分析器之一 - ANTS memory profilerdotTrace兩種商業選擇。

+0

謝謝你的代碼和產品 – a1204773