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 ms।