勇哥注:
.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
版权声明:本文为博主原创文章,转载请附上博文链接!