C# 计算时间差/运行耗时计算/时间计数器(非DateTime相减方法,Stopwatch类)及 与DateTime的对比测试

18 篇文章 0 订阅

背景:C#写了个Http服务器,中间加一个简单的处理耗时功能,以前都是用两个Time转为标准UTC去相减得到时间差的方法,脑子记忆太差,实在记不住那么多的Time格式。今天搜到一个专门用于实现时间差的类,记录一下。

StopWatch:提供一组方法和属性,可用于准确地测量运行时间。

 

using System.Diagnostics;

var stopWatch = new Stopwatch();

stopWatch.Start();//开始或继续某个时间间隔的运行时间

//....do some thing..

stopWatch.Stop();

var timeStr = stopWatch.Elapsed.ToString(); //标准时间格式。


StopWatch还有许多辅助方法,例如Reset、Restart、IsRunning等,个人感觉用起来很方便,但是不知道对系统性能有没有影响,暂时没有测试。

 

MSDN连接 : http://msdn.microsoft.com/zh-cn/library/system.diagnostics.stopwatch.aspx

Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间。 在典型的 Stopwatch 方案中,先调用 Start 方法,然后调用 Stop 方法,最后使用 Elapsed 属性检查运行时间。

Stopwatch 实例或者在运行,或者已停止;使用 IsRunning 可以确定 Stopwatch 的当前状态。 使用 Start 可以开始测量运行时间;使用 Stop 可以停止测量运行时间。 通过属性 ElapsedElapsedMillisecondsElapsedTicks 查询运行时间值。 当实例正在运行或已停止时,可以查询运行时间属性。 运行时间属性在 Stopwatch 运行期间稳固递增;在该实例停止时保持不变。

默认情况下,Stopwatch 实例的运行时间值相当于所有测量的时间间隔的总和。 每次调用 Start 时开始累计运行时间计数;每次调用 Stop 时结束当前时间间隔测量,并冻结累计运行时间值。 使用 Reset 方法可以清除现有 Stopwatch 实例中的累计运行时间。

Stopwatch 在基础计时器机制中对计时器的计时周期进行计数,从而测量运行时间。 如果安装的硬件和操作系统支持高分辨率性能计数器,则 Stopwatch 类将使用该计数器来测量运行时间; 否则,Stopwatch 类将使用系统计数器来测量运行时间。 使用 FrequencyIsHighResolution 字段可以确定实现 Stopwatch 计时的精度和分辨率。

Stopwatch 类为托管代码内与计时有关的性能计数器的操作提供帮助。 具体说来,Frequency 字段和 GetTimestamp 方法可以用于替换非托管 Win32 API QueryPerformanceFrequencyQueryPerformanceCounter

 

对比DateTime测试,测试方法不是很严谨~

以前使用的DateTime方式是:

var bdate = DateTime.UtcNow;

var edate = DateTime.UtcNow;

var timeSte =(edate - bdate).ToString();


我再服务器上运行同样的代码段,得出的结果分别是

DateTime is 00:00:00.0250014, StopWatch is 00:00:00.0248639

我的代码段时先执行的

                stopWatch.Stop();

然后马上
                var edate = DateTime.UtcNow;

所以产生了0.0002的偏差吧,呵呵。

结论就不下了~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值