概述
? ? ?計算一段程序的耗時是我們在編程中很常見的用法,那這節內容就通過實例的方式來演示幾種常用的統計耗時的方法.
方法一:stopwatch
static void Main(string[] args){Stopwatch sw = new Stopwatch();sw.Start();Thread.Sleep(999);sw.Stop();Console.WriteLine($"程序耗時:{sw.ElapsedMilliseconds}ms.");Console.ReadKey();}
最常用的計算耗時的就是使用Stopwatch,使用的時候需要引用命名空間:System.Diagnostics.
運行結果:
程序耗時:1012ms.
方法二:DateTime.Now
static void Main(string[] args){//Stopwatch sw = new Stopwatch();//sw.Start();//Thread.Sleep(999);//sw.Stop();//Console.WriteLine($"程序耗時:{sw.ElapsedMilliseconds}ms.");var start = DateTime.Now;Thread.Sleep(999);var stop = DateTime.Now;Console.WriteLine($"程序耗時:{(stop - start).TotalMilliseconds}ms.");Console.ReadKey();}
運行結果:
程序耗時:1012.2267ms.
方法二:ValueStopwatch
用法舉例如下:
using System;
using System.Diagnostics;
using System.Threading;namespace ConsoleApp27
{class Program{ static void Main(string[] args){//Stopwatch sw = new Stopwatch();//sw.Start();//Thread.Sleep(999);//sw.Stop();//Console.WriteLine($"程序耗時:{sw.ElapsedMilliseconds}ms.");//var start = DateTime.Now;//Thread.Sleep(999);//var stop = DateTime.Now;//Console.WriteLine($"程序耗時:{(stop - start).TotalMilliseconds}ms.");var watch = ValueStopwatch.StartNew();Thread.Sleep(999);Console.WriteLine($"程序耗時:{watch.GetElapsedTime().TotalMilliseconds}ms.");Console.ReadKey();}}internal struct ValueStopwatch{private static readonly double TimestampToTicks = TimeSpan.TicksPerSecond / (double)Stopwatch.Frequency;private readonly long _startTimestamp;public bool IsActive => _startTimestamp != 0;private ValueStopwatch(long startTimestamp){_startTimestamp = startTimestamp;}public static ValueStopwatch StartNew() => new ValueStopwatch(Stopwatch.GetTimestamp());public TimeSpan GetElapsedTime(){// Start timestamp can't be zero in an initialized ValueStopwatch. It would have to be literally the first thing executed when the machine boots to be 0.// So it being 0 is a clear indication of default(ValueStopwatch)if (!IsActive){throw new InvalidOperationException("An uninitialized, or 'default', ValueStopwatch cannot be used to get elapsed time.");}var end = Stopwatch.GetTimestamp();var timestampDelta = end - _startTimestamp;var ticks = (long)(TimestampToTicks * timestampDelta);return new TimeSpan(ticks);}}}
運行結果:
程序耗時:1008.0426ms.