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);
}
정적 메서드와 확장 메서드 (반복 및 벤치 마크 결합)를 테스트했으며 예상 실행 시간과 실제 실행 시간의 델타는 <= 1ms입니다.