C#中高精度計(jì)時(shí)器Stopwatch的用法詳解
引言
偶然發(fā)現(xiàn)C# 的計(jì)時(shí)器類(lèi)Stopwatch,他特別適合測(cè)量運(yùn)行時(shí)間,使用簡(jiǎn)單、計(jì)時(shí)精確。它源于命名空間System.Diagnostics,使用時(shí)必須using引用。
經(jīng)典舉例
下面用一秒延時(shí)的實(shí)例來(lái)創(chuàng)建一個(gè)最簡(jiǎn)單的實(shí)例。
(1)啟動(dòng)和停止方法實(shí)例
//按鍵單擊 private void button_watch_Click(object sender, EventArgs e) { Console.WriteLine("action_spent_time:" + watch(action)); } //模擬用戶(hù)函數(shù)耗時(shí) private void action() { Thread.Sleep(1000); } //開(kāi)始和停止定時(shí)器 public static double watch(Action action) { //實(shí)例化 Stopwatch stopWatch = new Stopwatch(); //啟動(dòng)定時(shí)器 stopWatch.Start(); //用戶(hù)任務(wù) action(); //停止定時(shí)器 stopWatch.Stop(); //返回計(jì)時(shí)器時(shí)間 return stopWatch.Elapsed.TotalMilliseconds; }
打印顯示
action_spent_time:1014.7956
(2)復(fù)位和重啟方法實(shí)例
//按鍵單擊 private void button_watch_Click(object sender, EventArgs e) { watchResetAndRestart(action); } //模擬用戶(hù)函數(shù)耗時(shí) private void action() { Thread.Sleep(1000); } //復(fù)位和重啟計(jì)時(shí)器時(shí)器 public void watchResetAndRestart(Action action) { //實(shí)例化 Stopwatch stopWatch = new Stopwatch(); //啟動(dòng)定時(shí)器 stopWatch.Start(); //用戶(hù)任務(wù) action(); Console.WriteLine("action:"+ stopWatch.Elapsed.TotalMilliseconds); //復(fù)位定時(shí)器 stopWatch.Reset(); Console.WriteLine("action reset:" + stopWatch.Elapsed.TotalMilliseconds); //重啟定時(shí)器 stopWatch.Restart(); //用戶(hù)任務(wù) action(); Console.WriteLine("action Restart:" + stopWatch.Elapsed.TotalMilliseconds); //復(fù)位定時(shí)器 stopWatch.Reset(); } }
打印顯示:
action:1000.8485
action reset:0
action Restart:1009.2571
小結(jié)
是不是覺(jué)得很簡(jiǎn)單。小伙伴們可以用起來(lái)。
1、實(shí)例中可以看到精度可以得到0.1微秒使用double類(lèi)型,我認(rèn)為算精度很高的吧,不需要這么高精度可以做運(yùn)算舍去,或者使用其它的更低精度的屬性,如stopWatch.ElapsedMilliseconds等。
2、復(fù)位reset()和停止Stop()的功能都停止了計(jì)時(shí)器,但是reset,將時(shí)間復(fù)位為0了,這里注意一下就好。
到此這篇關(guān)于C#中高精度計(jì)時(shí)器Stopwatch的用法詳解的文章就介紹到這了,更多相關(guān)C# Stopwatch內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#/VB.NET實(shí)現(xiàn)在Word文檔中添加頁(yè)眉和頁(yè)腳
頁(yè)眉位于文檔中每個(gè)頁(yè)面的頂部區(qū)域,常用于顯示文檔的附加信息;頁(yè)腳位于文檔中每個(gè)頁(yè)面的底部的區(qū)域,常用于顯示文檔的附加信息。今天這篇文章就將為大家展示如何以編程的方式在在?Word?文檔中添加頁(yè)眉和頁(yè)腳2023-03-03C#中foreach循環(huán)對(duì)比f(wàn)or循環(huán)的優(yōu)勢(shì)和劣勢(shì)
循環(huán)語(yǔ)句是編程的基本語(yǔ)句,在C#中除了沿用C語(yǔ)言的循環(huán)語(yǔ)句外,還提供了foreach語(yǔ)句來(lái)實(shí)現(xiàn)循環(huán),下面這篇文章主要給大家介紹了關(guān)于C#中foreach循環(huán)對(duì)比f(wàn)or循環(huán)的優(yōu)勢(shì)和劣勢(shì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-09-09C#中將字符串轉(zhuǎn)換為整型的三種解決方法總結(jié)
本篇文章是對(duì)C#中將字符串轉(zhuǎn)換為整型的三種解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06C#?委托與?Lambda?表達(dá)式轉(zhuǎn)換機(jī)制及弱事件模式下的生命周期詳解
本文介紹了C#委托和Lambda表達(dá)式的工作原理,包括委托的內(nèi)部結(jié)構(gòu)、Lambda表達(dá)式的轉(zhuǎn)換機(jī)制以及弱事件模式下的生命周期管理,感興趣的朋友一起看看吧2025-02-02C#使用foreach語(yǔ)句搜索數(shù)組元素的方法
這篇文章主要介紹了C#使用foreach語(yǔ)句搜索數(shù)組元素的方法,涉及C#使用foreach語(yǔ)句遍歷數(shù)組實(shí)現(xiàn)搜索功能的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04c#反射機(jī)制學(xué)習(xí)和利用反射獲取類(lèi)型信息
反射(Reflection)是.NET中的重要機(jī)制,通過(guò)放射,可以在運(yùn)行時(shí)獲得.NET中每一個(gè)類(lèi)型(包括類(lèi)、結(jié)構(gòu)、接口和枚舉等)的成員,包括方法、屬性、事件,以及構(gòu)造函數(shù)等,還可以獲得每個(gè)成員的名稱(chēng)、限定符和參數(shù)等,有了反射,即可對(duì)每一個(gè)類(lèi)型了如指掌2014-01-01深入多線(xiàn)程之:深入生產(chǎn)者、消費(fèi)者隊(duì)列分析
本篇文章是對(duì)生產(chǎn)者與消費(fèi)者隊(duì)列進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05