您的位置:首页 > 编程语言 > C#

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

2014-03-26 10:50 399 查看
背景: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 可以停止测量运行时间。
通过属性 ElapsedElapsedMilliseconds
ElapsedTicks 查询运行时间值。
当实例正在运行或已停止时,可以查询运行时间属性。
运行时间属性在 Stopwatch 运行期间稳固递增;在该实例停止时保持不变。

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

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

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

 

对比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的偏差吧,呵呵。

结论就不下了~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  时间差 计时器