背景: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的偏差吧,呵呵。

结论就不下了~