在C#中取得执行时间

为了找出系统中的效能问题,各个函数的执行时间是一个参考的依据,本文纪录如何在 C# 中知道区段的执行时间。

Stopwatch class

Stopwatch class 是专门用来测量区间内所耗用的时间,它在 System.Diagnostics namespace 中。

...using System.Diagnostics;...class Program{    static void Main(string[] args)    {      Stopwatch stopWatch = new Stopwatch();      // System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();    }}

上面的代码建立了一个 Stopwatch 的实体,记得加上 using System.Diagnostics; ,或是在叫用时包含命名空间。

启动与停止计时器

在想要计算的代码前使用 Start 方法启动,并在之后使用 Stop 方法停止计时器。

Stopwatch stopWatch = new Stopwatch();stopWatch.Start();// Some CodestopWatch.Stop();

Stopwatch 也有提供单一指令初始化及启动计时器的 StartNew 静态方法,可以较为简洁。

Stopwatch stopWatch = Stopwatch.StartNew();// Some CodestopWatch.Stop();

取得耗用时间

可以使用 ElapsedMilliseconds 属性取得以毫秒为单位的耗用时间。

Stopwatch stopWatch = Stopwatch.StartNew();// Some CodestopWatch.Stop();Console.WriteLine(stopWatch.ElapsedMilliseconds);

Stopwatch 还有提供格式为 TimeSpanElapsed 属性,以及更精确的计时器刻度的 ElapsedTicks 属性。

重启计时器

在开始计时器停止后如果叫用 Start 方法,计时器并不会被重製,时间会从原本的往上加:

System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();stopWatch.Start();Thread.Sleep(1000);stopWatch.Stop();Console.WriteLine(stopWatch.ElapsedMilliseconds);stopWatch.Start();Thread.Sleep(1000);stopWatch.Stop();Console.WriteLine(stopWatch.ElapsedMilliseconds);
10032018

重启计时器可以使用 Reset 方法。

System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();stopWatch.Start();Thread.Sleep(1000);stopWatch.Stop();Console.WriteLine(stopWatch.ElapsedMilliseconds);stopWatch.Reset();stopWatch.Start();Thread.Sleep(1000);stopWatch.Stop();Console.WriteLine(stopWatch.ElapsedMilliseconds);
10071015

两段一样的代码,执行时间不一定会相同,因此上面这个例子两区段的时间是不会一样的。

也可以使用单一指令 Restart 方法同时 ResetStart 计时器:

stopWatch.Restart();Thread.Sleep(1000);stopWatch.Stop();Console.WriteLine(stopWatch.ElapsedMilliseconds);

範例程式码

Gist

参考资料

StackOverflow: Calculate the execution time of a method.NET Documentation: Stopwatch 类别

同步发表于 LimitlessPing


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章