StopWatch
クラスは、である必要はありませんDisposed
か、Stopped
エラーに。したがって、いくつかのアクションのタイミングを決める最も簡単なコードは
public partial class With
{
public static long Benchmark(Action action)
{
var stopwatch = Stopwatch.StartNew();
action();
stopwatch.Stop();
return stopwatch.ElapsedMilliseconds;
}
}
呼び出しコードの例
public void Execute(Action action)
{
var time = With.Benchmark(action);
log.DebugFormat(“Did action in {0} ms.”, time);
}
StopWatch
コードに反復を含めるという考えは好きではありません。実行中のN
反復を処理する別のメソッドまたは拡張機能をいつでも作成できます。
public partial class With
{
public static void Iterations(int n, Action action)
{
for(int count = 0; count < n; count++)
action();
}
}
呼び出しコードの例
public void Execute(Action action, int n)
{
var time = With.Benchmark(With.Iterations(n, action));
log.DebugFormat(“Did action {0} times in {1} ms.”, n, time);
}
拡張メソッドのバージョンは次のとおりです
public static class Extensions
{
public static long Benchmark(this Action action)
{
return With.Benchmark(action);
}
public static Action Iterations(this Action action, int n)
{
return () => With.Iterations(n, action);
}
}
そして、サンプルの呼び出しコード
public void Execute(Action action, int n)
{
var time = action.Iterations(n).Benchmark()
log.DebugFormat(“Did action {0} times in {1} ms.”, n, time);
}
静的メソッドと拡張メソッド(反復とベンチマークを組み合わせたもの)をテストしました。予想実行時間と実際の実行時間の差は1ミリ秒以下です。