StopWatch的使用(计时,时间间隔) - (第二十九讲)
开发环境为 Visual Studio 2019。
网盘下载,提取码:23n4
Stopwatch 可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间。一般用来测量代码执行所用的时间或者计算性能数据,在优化代码性能上可以使用Stopwatch来测量时间。
使用的时候需要引用 System.Diagnostics 命名空间。
先调用 Start 方法,然后调用 Stop 方法,最后使用 Elapsed 属性或者使用 ElapsedMilliseconds 属性得到运行时间(这两个属性的区别是前者得到的是TimeSpan实例,后者得到的是毫秒)。使用 IsRunning 可以确定 Stopwatch 的当前状态是正在运行还是已经停止。每次调用 Start 时开始累计运行时间计数;每次调用 Stop 时结束当前时间间隔测量,并冻结累计运行时间值。 使用 Reset 方法可以清除现有 Stopwatch 实例中的累计运行时间。
演示效果如下

Stopwatch stopwatch = new Stopwatch();
//第一次计时
stopwatch.Start(); //启动Stopwatch
Console.WriteLine("Stopwatch运行状态:{0}", stopwatch.IsRunning);
System.Threading.Thread.Sleep(2000);//耗时操作
stopwatch.Stop(); //停止Stopwatch
Console.WriteLine("[1]时分秒输出耗时:{0}", stopwatch.Elapsed.ToString());
Console.WriteLine("[1]按毫秒输出耗时:{0}", stopwatch.ElapsedMilliseconds);
Console.WriteLine("===================================================");
//第二次计时
stopwatch.Start();
System.Threading.Thread.Sleep(1000);//耗时操作
stopwatch.Stop();
Console.WriteLine("[2]按毫秒输出耗时:{0}", stopwatch.ElapsedMilliseconds);
Console.WriteLine("===================================================");
//第三次计时(这里使用了Restart)
stopwatch.Restart();//这里使用Restart来启动计时(会把前面的时间清空)
System.Threading.Thread.Sleep(1000);//耗时操作
stopwatch.Stop();
Console.WriteLine("[3]按毫秒输出耗时:{0}", stopwatch.ElapsedMilliseconds);
Console.ReadKey(); //等待输入
补充内容:
namespace System.Diagnostics
{
//
// 摘要:
// 提供一组方法和属性,可用于准确地测量运行时间。
public class Stopwatch
{
//
// 摘要:
// 获取以每秒计时周期数表示的计时器频率。此字段为只读。
public static readonly long Frequency;
//
// 摘要:
// 指示计时器是否基于高分辨率性能计数器。此字段为只读。
public static readonly bool IsHighResolution;
//
// 摘要:
// 初始化 System.Diagnostics.Stopwatch 类的新实例。
public Stopwatch();
//
// 摘要:
// 获取当前实例测量得出的总运行时间。
//
// 返回结果:
// 一个只读的 System.TimeSpan,用于表示当前实例测量得出的总运行时间。
public TimeSpan Elapsed { get; }
//
// 摘要:
// 获取当前实例测量得出的总运行时间(以毫秒为单位)。
//
// 返回结果:
// 一个只读长整型,表示当前实例测量得出的总毫秒数。
public long ElapsedMilliseconds { get; }
//
// 摘要:
// 获取当前实例测量得出的总运行时间(用计时器计时周期表示)。
//
// 返回结果:
// 一个只读长整型,表示当前实例测量得出的计时器计时周期的总数。
public long ElapsedTicks { get; }
//
// 摘要:
// 获取一个指示 System.Diagnostics.Stopwatch 计时器是否在运行的值。
//
// 返回结果:
// 如果 System.Diagnostics.Stopwatch 实例当前正在运行,并且在对某个时间间隔的运行时间进行测量,则该值为 true;否则为 false。
public bool IsRunning { get; }
//
// 摘要:
// 获取计时器机制中的当前最小时间单位数。
//
// 返回结果:
// 一个长整型,表示基础计时器机制中的计时周期计数器值。
public static long GetTimestamp();
//
// 摘要:
// 对新的 System.Diagnostics.Stopwatch 实例进行初始化,将运行时间属性设置为零,然后开始测量运行时间。
//
// 返回结果:
// 刚刚开始测量运行时间的 System.Diagnostics.Stopwatch。
public static Stopwatch StartNew();
//
// 摘要:
// 停止时间间隔测量,并将运行时间重置为零。
public void Reset();
//
// 摘要:
// 停止时间间隔测量,将运行时间重置为零,然后开始测量运行时间。
public void Restart();
//
// 摘要:
// 开始或继续测量某个时间间隔的运行时间。
public void Start();
//
// 摘要:
// 停止测量某个时间间隔的运行时间。
public void Stop();
}
}