帝国CMS模板大全
www.admin99.cn
www.92cms.cn 帝国CMS模板下载站!,情怀,养站,二次开发!源码需求比较大的一站式会员下载,价更省!!!

C#精确到纳秒级别的计时器类实现代码

主要用到了win32里面的QueryPerformanceCounter和QueryPerformanceFrequency两个函数

文档链接:https://docs.microsoft.com/zh-cn/windows/win32/api/profileapi/nf-profileapi-queryperformancecounter

class NanoSecondTimer
{

[DllImport(“Kernel32.dll”)]
private static extern bool QueryPerformanceCounter(out long lpPerformanceCount);

[DllImport(“Kernel32.dll”)]
private static extern bool QueryPerformanceFrequency(out long lpFrequency);

private long startTime, stopTime;
private long freq;
public NanoSecondTimer()
{
startTime = 0;
stopTime = 0;
if (QueryPerformanceFrequency(out freq) == false)
{
throw new Win32Exception();
}
}

/// <summary>
/// 开始计时
/// </summary>
public void Start()
{
Thread.Sleep(0);
QueryPerformanceCounter(out startTime);
}

/// <summary>
/// 停止计时
/// </summary>
public void Stop()
{
QueryPerformanceCounter(out stopTime);
}

/// <summary>
/// 返回计时器经过时间(单位:秒)
/// </summary>
public double Duration
{
get
{
return (double)(stopTime – startTime) / (double)freq;
}
}
}

QueryPerformanceFrequency这个函数会检索性能计数器的频率。性能计数器的频率在系统启动时是固定的,并且在所有处理器上都是一致的。因此,只需在应用初始化时查询频率,即可缓存结果。在运行 Windows XP 或更高版本的系统上,该函数将始终成功,因此永远不会返回零。

下面是测试代码:

NanoSecondTimer nanoSecondTimer = new NanoSecondTimer();
nanoSecondTimer.Start();
for (int i = 0; i < 100000; i++)
{
i++;
}
nanoSecondTimer.Stop();
double time = nanoSecondTimer.Duration;

到此这篇关于C#精确到纳秒级别的计时器类的文章就介绍到这了,更多相关C#计时器类内容请搜索www.admin99.cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.admin99.cn!

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《C#精确到纳秒级别的计时器类实现代码》
文章链接:https://www.admin99.cn/7650
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
QQ站长交流群:953950264

登录

找回密码

注册