C#精确到纳秒级别的计时器类实现代码
【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(); }}/// /// 开始计时/// public void Start(){Thread.Sleep(0); QueryPerformanceCounter(out startTime); }/// /// 停止计时/// public void Stop(){QueryPerformanceCounter(out stopTime); }/// ///返回计时器经过时间(单位:秒)/// 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#计时器类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 2018-02-06第三天|2018-02-06第三天 不能再了,反思到位就差改变
- 一个小故事,我的思考。
- 第三节|第三节 快乐和幸福(12)
- 你到家了吗
- 遇到一哭二闹三打滚的孩子,怎么办┃山伯教育
- 死结。
- 赢在人生六项精进二阶Day3复盘
- 子龙老师语录
- 异地恋中,逐渐适应一个人到底意味着什么()
- 即将到手三百万