博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#中各种计时器 Stopwatch、TimeSpan
阅读量:6901 次
发布时间:2019-06-27

本文共 3240 字,大约阅读时间需要 10 分钟。

1、使用 Stopwatch 类 (System.Diagnostics.Stopwatch)
Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间。
在典型的 Stopwatch 方案中,先调用 Start 方法,然后调用 Stop 方法,最后使用 Elapsed 属性检查运行时间。
Stopwatch 实例或者在运行,或者已停止;使用 IsRunning 可以确定 Stopwatch 的当前状态。使用 Start 可以开始测量运行时间;使用 Stop 可以停止测量运行时间。通过属性 Elapsed、ElapsedMilliseconds 或 ElapsedTicks 查询运行时间值。当实例正在运行或已停止时,可以查询运行时间属性。运行时间属性在 Stopwatch 运行期间稳固递增;在该实例停止时保持不变。
默认情况 下,Stopwatch 实例的运行时间值相当于所有测量的时间间隔的总和。每次调用 Start 时开始累计运行时间计数;每次调用 Stop 时结束当前时间间隔测量,并冻结累计运行时间值。使用 Reset 方法可以清除现有 Stopwatch 实例中的累计运行时间。
Stopwatch在基础计时器机制中对计时器的刻度进行计数,从而测量运行时间。如果安装的硬件和操作系统支持高分辨率性能的计数器,则 Stopwatch 类将使用该计数器来测量运行时间;否则,Stopwatch 类将使用系统计数器来测量运行时间。使用 Frequency 和 IsHighResolution 字段可以确定实现 Stopwatch 计时的精度和分辨率。
示例
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();stopwatch.Start();//任务 1...stopwatch.Stop();_result.Text += "

任务 1 用时:" + stopwatch.ElapsedTicks + "。

";stopwatch.Reset(); //若没有 Reset,则会把任务 1 的用时累计进入任务 2stopwatch.Start();//任务 2...stopwatch.Stop();_result.Text += "

任务 2 用时:" + stopwatch.ElapsedTicks + "。

";
2、基于 Windows 的标准计时器(System.Windows.Forms.Timer)
Windows 计时器是为单线程环境设计的,这个计时器是使用最简单的一种,只要把工具箱中的Timer控件拖到窗体上,然后设置一下事件和间隔时间等属性就可以了。
3、基于服务器的计时器(System.Timers.Timer)
System.Timers.Timer不依赖窗体,是从线程池唤醒线程,是传统的计时器为了在服务器环境上运行而优化后的更新版本。
4、线程计时器(System.Threading.Timer)
线程计时器也不依赖窗体,是一种简单的、轻量级计时器,它使用回调方法而不是使用事件,并由线程池线程提供支持。
5、System.Environment.TickCount
TickCount属性用来获取来自计算机的系统计时器的毫秒计数。
用法:
int startTime=System.Environment.TickCount; ......任务...... int endTime=System.Environment.TickCount; int runTime=endTime-startTime;(注意单位是毫秒哦!)
6、使用 TimeSpan类(System.TimeSpan )

      TimeSpan对象表示时间间隔或持续时间,按正负天数、小时数、分钟数、秒数以及秒的小数部分进行度量。用于度量持续时间的最大时间单位是天。更大的时间单位(如月和年)的天数不同,因此为保持一致性,时间间隔以天为单位来度量。

      TimeSpan 对象的值是等于所表示时间间隔的刻度数。一个刻度等于 100 纳秒,TimeSpan 对象的值的范围在 和 之间。

      TimeSpan 值可以表示为 [-]d.hh:mm:ss.ff,其中减号是可选的,它指示负时间间隔,d分量表示天,hh 表示小时(24 小时制),mm 表示分钟,ss 表示秒,而 ff为秒的小数部分。即,时间间隔包括整的正负天数、天数和剩余的不足一天的时长,或者只包含不足一天的时长。例如,初始化为 1.0e+13 刻度的 TimeSpan 对象的文本表示“11.13:46:40”,即 11 天,13 小时,46 分钟和 40  秒。

用法:

///         /// Description:        /// 1. 获取"当前时间"与"比较时间"之间的毫秒差        /// 2. 静态方法        /// Author     : 付义方        /// Create Date: 2014-03-06        ///         /// 比较时间        /// 
毫秒差
public static int GetDifferMilliSecond(DateTime compareTime) { return DateTime.Now.Subtract(compareTime).Milliseconds; }

 

DateTime tempTime = DateTime.Now;                            _logger.Info("Task Wait begin", string.Format("{0}开始执行{1}个任务",                                                     DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),                                                    execTask));                            try                            {                                Task.WaitAll(tasks);//等待执行发送任务完成                                UpTaskStatus(_MdDatacubeofjobinfotaskModel.PlanCode, _ActionSet); //判断该批次数据是否执行完毕                            }                            catch { }                            _logger.Info("Task Wait end", string.Format("{0}已执行完成{1}个任务, 耗时{2}/ms",                                                     DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),                                                   execTask, TimeHelper.GetDifferMilliSecond(tempTime)));

 

转载地址:http://xtvdl.baihongyu.com/

你可能感兴趣的文章
小程序瀑布流效果,解决左右两边高度差距过大的问题
查看>>
Vue中data和computed的区别
查看>>
Python类、模块、包的概念及区别
查看>>
辞职的新方式:一言不合就消失!
查看>>
那些被忽略的 JavaScript 数组方法细节
查看>>
【翻译】babel对TC39装饰器草案的实现
查看>>
深圳Android技术大会分享
查看>>
彻底理解浏览器的缓存机制(http缓存机制)
查看>>
最佳安全实践:在 Java 和 Android 中使用 AES 进行对称加密:第2部分:AES-CBC + HMAC...
查看>>
10 行代码提取复杂 Excel 数据
查看>>
微信小程序如何调用后台service的简单记录
查看>>
Django WebSocket Redis 在线聊天室
查看>>
全图化引擎(AI·OS)中的编译技术
查看>>
如何运营一家数据标注公司 (基础架构篇)
查看>>
性能跃升50%!解密自主研发的金融级分布式关系数据库OceanBase 2.0
查看>>
JavaScript:this的指向
查看>>
使用 VSCode 调试 Koa 或者 Express 项目
查看>>
[LeetCode]Valid Parentheses(有效括号问题)
查看>>
服务器上部署scrapy爬虫项目
查看>>
web前端对文件的引用规则
查看>>