计算代码执行时间,可以精确到十亿分之一秒
注:
.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;