2012-06-21 66 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