如何轻松计时一块C#代码?

时间:2011-10-11 12:57:38

标签: c# c++

我需要一种简单的方法(如果可能的话,紧凑)在计算时间时执行一个C#块。类似于这个C ++代码的东西:

elapsed = time_call([&] 
   {
      for_each (a.begin(), a.end(), [&](int n) {
         results1.push_back(make_tuple(n, fibonacci(n)));
      });
   });   

其中time_call是:

// Calls the provided work function and returns the number of milliseconds 
// that it takes to call that function.
template <class Function>
__int64 time_call(Function&& f)
{
   __int64 begin = GetTickCount();
   f();
   return GetTickCount() - begin;
}

我知道秒表的方式......更紧凑吗?

3 个答案:

答案 0 :(得分:13)

TimeSpan TimeAction(Action blockingAction)
{
    Stopwatch stopWatch = System.Diagnostics.Stopwatch.StartNew();
    blockingAction();
    stopWatch.Stop();
    return stopWatch.Elapsed;
}

用法:

var elapsed = TimeAction(() =>
    {
        //Code to time
    });

根据您的示例代码(以及GetTickCount的使用情况),您可能希望返回ElapsedTicks而不是Elapsed

答案 1 :(得分:6)

public double TimeCall(Action actionToExecute)
{
   double elapsed = 0;

   if (actionToExecute != null)
   {
      var stopwatch = Stopwatch.StartNew();
      actionToExecute.Invoke();
      elapsed = stopwatch.ElapsedMilliseconds;
   }

   return elapsed;
}

使用方法:

var elapsed = TimeCall( () => { foreach( ... ) } );

答案 2 :(得分:0)

我不知道秒表方式,但C#也有lambda,所以应该很容易实现类似于time_call()的东西。