C# 高精度计时器Stopwatch
- 引言
- 经典举例
- (1)启动和停止方法实例
- (2)复位和重启方法实例
- 小结
引言
偶然发现C# 的计时器类Stopwatch,他特别适合测量运行时间,使用简单、计时精确。它源于命名空间System.Diagnostics,使用时必须using引用。
经典举例
下面用一秒延时的实例来创建一个最简单的实例。
(1)启动和停止方法实例
//按键单击private void button_watch_Click(object sender, EventArgs e){ Console.WriteLine("action_spent_time:" + watch(action));}//模拟用户函数耗时private void action(){Thread.Sleep(1000);}//开始和停止定时器public static double watch(Action action){//实例化Stopwatch stopWatch = new Stopwatch();//启动定时器stopWatch.Start();//用户任务action();//停止定时器stopWatch.Stop();//返回计时器时间return stopWatch.Elapsed.TotalMilliseconds;}
打印显示
action_spent_time:1014.7956
(2)复位和重启方法实例
//按键单击private void button_watch_Click(object sender, EventArgs e){watchResetAndRestart(action);}//模拟用户函数耗时private void action(){Thread.Sleep(1000);}//复位和重启计时器时器public void watchResetAndRestart(Action action){//实例化Stopwatch stopWatch = new Stopwatch();//启动定时器stopWatch.Start();//用户任务action();Console.WriteLine("action:"+ stopWatch.Elapsed.TotalMilliseconds);//复位定时器stopWatch.Reset();Console.WriteLine("action reset:" + stopWatch.Elapsed.TotalMilliseconds);//重启定时器stopWatch.Restart();//用户任务action();Console.WriteLine("action Restart:" + stopWatch.Elapsed.TotalMilliseconds);//复位定时器stopWatch.Reset();}
}
打印显示:
action:1000.8485
action reset:0
action Restart:1009.2571
小结
是不是觉得很简单。小伙伴们可以用起来。
1、实例中可以看到精度可以得到0.1微秒使用double类型,我认为算精度很高的吧,不需要这么高精度可以做运算舍去,或者使用其它的更低精度的属性,如stopWatch.ElapsedMilliseconds等。
2、复位reset()和停止Stop()的功能都停止了计时器,但是reset,将时间复位为0了,这里注意一下就好。