2012-06-21 2 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) на рынке.

Вы можете также выполнить функции самостоятельно, установив некоторые модульные тесты, которые выполняют эти 2 функции с помощью ручного инструментария 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 profiler, dotTrace два коммерческих вариантов.

+0

Благодарим за код и за продукцию – a1204773

Смежные вопросы