勇哥注:
.Net的Stopwatch类可以精确到1/10000毫秒, 有没有更精确的计时吗?
见下面的代码。暂时没试过效果,大家可以试下。
计算某个代码片段的执行时间,精确到CPU执行一条指令所用的时间(十亿分之一秒),可用于精确计算某个算法的执行时间。
代码:
using System; using System.Runtime.InteropServices; using System.ComponentModel; using System.Threading; /// <summary> /// 作用:计算执行时间 /// 说明:需依赖 Kernel32.dll /// </summary> public class PreciseTimer { [DllImport("Kernel32.dll")] private static extern bool QueryPerformanceCounter (out long lpPerformanceCount); [DllImport("Kernel32.dll")] private static extern bool QueryPerformanceFrequency(out long lpPerformanceFrequency); private long startTime;//开始时间 private long stopTime;//终止时间 private long requency;//频率 /// <summary> /// 构造方法 /// </summary> public PreciseTimer () { if (QueryPerformanceFrequency(out requency) == false) { throw new Win32Exception(); } } /// <summary> /// 开始计时 /// </summary> public void Start () { startTime = 0; stopTime = 0; Thread.Sleep(0); QueryPerformanceCounter(out startTime); } /// <summary> /// 停止计时 /// </summary> public void Stop () { QueryPerformanceCounter(out stopTime); } /// <summary> /// 历时时长单位毫秒 /// </summary> public double Duration { get { return (double)(stopTime - startTime) * 1000 / (double)requency; } } }
1、说明:
此类需依赖 Kernel32.dll 文件(window 自带),其中包含下列方法及属性
属性:public double Duration //记录时长单位毫秒
构造方法:public PreciseTimer ()
开始计时:public void Start ()
停止计时:public void Stop ()
2、使用方法:
将 PreciseTimer.cs 加入项目中
在要计时的代码段中依次调用 Start()、Stop()方法,使用 Duration 属性获取时长。
3、例:
PreciseTimer myTimer = new PreciseTimer(); myTimer.Start(); /*要计算执行时间的代码片*/ myTimer.Stop(); double times = myTimer.Duration;
勇哥的另一篇文章有更进一步的说明。
C# 勇哥对于Stopwatch进一步了解:精确测量运行时间
--------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

