Các StopWatchlớp không cần phải Disposedhoặc Stoppedvề 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 StopWatchmã. 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 Nlầ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.