背景: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 可以停止测量运行时间。 通过属性 Elapsed、ElapsedMilliseconds 或 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的偏差吧,呵呵。
结论就不下了~