C#精確到納秒級(jí)別的計(jì)時(shí)器類實(shí)現(xiàn)代碼
主要用到了win32里面的QueryPerformanceCounter和QueryPerformanceFrequency兩個(gè)函數(shù)
文檔鏈接: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> /// 開(kāi)始計(jì)時(shí) /// </summary> public void Start() { Thread.Sleep(0); QueryPerformanceCounter(out startTime); } /// <summary> /// 停止計(jì)時(shí) /// </summary> public void Stop() { QueryPerformanceCounter(out stopTime); } /// <summary> /// 返回計(jì)時(shí)器經(jīng)過(guò)時(shí)間(單位:秒) /// </summary> public double Duration { get { return (double)(stopTime - startTime) / (double)freq; } } }
QueryPerformanceFrequency這個(gè)函數(shù)會(huì)檢索性能計(jì)數(shù)器的頻率。性能計(jì)數(shù)器的頻率在系統(tǒng)啟動(dòng)時(shí)是固定的,并且在所有處理器上都是一致的。因此,只需在應(yīng)用初始化時(shí)查詢頻率,即可緩存結(jié)果。在運(yùn)行 Windows XP 或更高版本的系統(tǒng)上,該函數(shù)將始終成功,因此永遠(yuǎn)不會(huì)返回零。
下面是測(cè)試代碼:
NanoSecondTimer nanoSecondTimer = new NanoSecondTimer(); nanoSecondTimer.Start(); for (int i = 0; i < 100000; i++) { i++; } nanoSecondTimer.Stop(); double time = nanoSecondTimer.Duration;
到此這篇關(guān)于C#精確到納秒級(jí)別的計(jì)時(shí)器類的文章就介紹到這了,更多相關(guān)C#計(jì)時(shí)器類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#多線程學(xué)習(xí)之(四)使用線程池進(jìn)行多線程的自動(dòng)管理
這篇文章主要介紹了C#多線程學(xué)習(xí)之使用線程池進(jìn)行多線程的自動(dòng)管理,實(shí)例分析了C#中線程池的概念與相關(guān)的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04C# .NET實(shí)現(xiàn)掃描識(shí)別圖片中的文字
本文以C#及VB.NET代碼為例,介紹如何掃描并讀取圖片中的文字。文中的示例代碼介紹詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2021-12-12C# WinForm程序設(shè)計(jì)簡(jiǎn)單計(jì)算器
這篇文章主要為大家詳細(xì)介紹了C# WinForm程序設(shè)計(jì)簡(jiǎn)單計(jì)算器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02C#簡(jiǎn)單實(shí)現(xiàn)在網(wǎng)頁(yè)上發(fā)郵件的案例
本文分享一個(gè)C#利用SMTP發(fā)送郵件的案例,提供了前后臺(tái)代碼,方便大家學(xué)習(xí)。2016-03-03