2012-03-22 4 views
-4

Мои данные машины: 32bit ОС (Win-7), двухъядерный, тактовая частота: 2,93, язык, используемый = с #как рассчитать общее время, затраченное на петлевых

У меня есть цикл

for (long d = 0 d<= K ; d++) 
{ 
    //no instrucitons 
} 

если K - любой длинный номер.

Какова будет формула для расчета требуемого времени (в секундах) для завершения этого цикла?

+0

предположить ничтожные другие потоки, процессы на машине, которая использует процессор. – Dhananjay

+0

Вы имеете в виду без использования таймера или секундомера и запуска программы? – Msonic

+0

Предположим, что это для жесткой системы реального времени? В значительной степени не вопрос, поскольку C# никогда не может соответствовать этому стилю. GC может ударить его в любой момент и полностью распустить любые вычисления. –

ответ

8

Вы можете использовать Stopwatch.Elapsed Property из Stopwatch class

using System; 
using System.Diagnostics; 
using System.Threading; 
class Program 
{ 
    static void Main(string[] args) 
    { 
     Stopwatch stopWatch = new Stopwatch(); 
     stopWatch.Start(); 
     for (long d = 0; d<= K; d++) 
     {  
     //do something 
     }   
     stopWatch.Stop(); 
     // Get the elapsed time as a TimeSpan value. 
     TimeSpan ts = stopWatch.Elapsed; 

     // Format and display the TimeSpan value. 
     string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", 
      ts.Hours, ts.Minutes, ts.Seconds, 
      ts.Milliseconds/10); 
     Console.WriteLine("RunTime " + elapsedTime); 
    } 
} 
+0

Он попросил формулу не источник. –

+0

Wow, мне нравится, как вы сбросили код цикла OP в середине всего этого кода, но не потрудились исправить сам оператор 'for'. (После начального условия отсутствует точка с запятой.) –

+1

Было больше подходит для класса секундомера, не обратил много внимания на цикл, исправленный сейчас. – turbo

1

Если скомпилировать пустой цикл, который не имеет никаких побочных эффектов (которые в вашем примерном случае означает, что чтение K не имеет побочных эффектов), то время выполнения должен быть равен нулю, поскольку компилятор будет оптимизировать его, видя, что он ничего не полезен.

0

Вы можете использовать stopwatch

Stopwatch sw = new Stopwatch(); 
sw.start(); 
for(long d = 0 d<= K ; d++) 
{ 
    //dostuff 
} 
sw.stop() 
debug.writeline(sw.ElapsedMilliseconds); 
Смежные вопросы