Các StopWatch
lớp không cần phải Disposed
hoặc Stopped
về lỗi. Vì vậy, mã đơn giản nhất để thực hiện một số hành động là
public partial class With
{
public static long Benchmark(Action action)
{
var stopwatch = Stopwatch.StartNew();
action();
stopwatch.Stop();
return stopwatch.ElapsedMilliseconds;
}
}
Mã cuộc gọi mẫu
public void Execute(Action action)
{
var time = With.Benchmark(action);
log.DebugFormat(“Did action in {0} ms.”, time);
}
Tôi không thích ý tưởng bao gồm các lần lặp lại vào StopWatch
mã. Bạn luôn có thể tạo một phương thức hoặc tiện ích mở rộng khác xử lý các N
lần lặp đang thực thi .
public partial class With
{
public static void Iterations(int n, Action action)
{
for(int count = 0; count < n; count++)
action();
}
}
Mã cuộc gọi mẫu
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);
}
Đây là các phiên bản phương pháp mở rộng
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);
}
}
Và mã cuộc gọi mẫu
public void Execute(Action action, int n)
{
var time = action.Iterations(n).Benchmark()
log.DebugFormat(“Did action {0} times in {1} ms.”, n, time);
}
Tôi đã thử nghiệm các phương pháp tĩnh và phương thức mở rộng (kết hợp các lần lặp lại và điểm chuẩn) và thời gian thực thi dự kiến và thời gian thực thi thực tế là <= 1 ms.