您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關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#如何實現精確到納秒級別的計時器類”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。