测量代码执行时间

为了testing的目的,我想知道一个程序/函数/命令需要多less时间才能完成。

这是我做的,但我的方法是错误的,因为如果秒的差异是0不能返回经过的毫秒:

请注意,睡眠值是500毫秒,因此经过的秒数为0,则无法返回毫秒。

Dim Execution_Start As System.DateTime = System.DateTime.Now Threading.Thread.Sleep(500) Dim Execution_End As System.DateTime = System.DateTime.Now MsgBox(String.Format("H:{0} M:{1} S:{2} MS:{3}", _ DateDiff(DateInterval.Hour, Execution_Start, Execution_End), _ DateDiff(DateInterval.Minute, Execution_Start, Execution_End), _ DateDiff(DateInterval.Second, Execution_Start, Execution_End), _ DateDiff(DateInterval.Second, Execution_Start, Execution_End) * 60)) 

有人可以告诉我一个更好的方法来做到这一点? 也许用TimeSpan

解决scheme:

 Dim Execution_Start As New Stopwatch Execution_Start.Start() Threading.Thread.Sleep(500) MessageBox.Show("H:" & Execution_Start.Elapsed.Hours & vbNewLine & _ "M:" & Execution_Start.Elapsed.Minutes & vbNewLine & _ "S:" & Execution_Start.Elapsed.Seconds & vbNewLine & _ "MS:" & Execution_Start.Elapsed.Milliseconds & vbNewLine, _ "Code execution time", MessageBoxButtons.OK, MessageBoxIcon.Information) 

更好的方法是使用秒表 ,而不是DateTime差异。

秒表类 – MSDN

提供一组方法和属性,您可以使用这些方法和属性精确测量已用时间。

 Stopwatch stopwatch = Stopwatch.StartNew(); //creates and start the instance of Stopwatch //your sample code System.Threading.Thread.Sleep(500); stopwatch.Stop(); Console.WriteLine(stopwatch.ElapsedMilliseconds); 

Stopwatch测量时间已过。

 // Create new stopwatch Stopwatch stopwatch = new Stopwatch(); // Begin timing stopwatch.Start(); Threading.Thread.Sleep(500) // Stop timing stopwatch.Stop(); Console.WriteLine("Time elapsed: {0}", stopwatch.Elapsed); 

这是一个DEMO

你可以使用这个秒表包装:

 public class Benchmark : IDisposable { private readonly Stopwatch timer = new Stopwatch(); private readonly string benchmarkName; public Benchmark(string benchmarkName) { this.benchmarkName = benchmarkName; timer.Start(); } public void Dispose() { timer.Stop(); Console.WriteLine($"{benchmarkName} {timer.Elapsed}"); } } 

用法:

 using (var bench = new Benchmark($"Insert {n} records:")) { ... yout code here } 

输出:

 Insert 10 records: 00:00:00.0617594 

对于高级场景,您可以使用Benchmark.It或NBench

如果您使用Stopwatch类,则可以使用.StartNew()方法将手表重置为0.因此,您不必调用.Reset(),然后再调用.Start ()。 可能会派上用场。

秒表是专门为此目的而devise的,是在.NET中测量时间执行的最佳方法之一。

 var watch = System.Diagnostics.Stopwatch.StartNew(); /* the code that you want to measure comes here */ watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; 

不要使用DateTimes来测量.NET中的时间执行。