C 三種效能分析計時器介紹

2021-08-07 20:40:41 字數 2038 閱讀 5295

第一種方法:使用stopwatch

class program

sw.stop();

console.writeline(sw.elapsedmilliseconds.tostring());

}private

static

void internalmethod()

}

上面的**重 複調用了方法100多萬次,花的時間是7ms左右。而如果把for裡的方法呼叫去掉,則只需要3ms左右,也就是說100多萬次的呼叫要花費5ms左右的時間。

如果把for增加到1億次,則需要500多ms。 

第二種方法:使用environment.tickcount

class program

console.writeline(environment.tickcount - vtickcount);}}

第三種方法:高效能精確測量:win32 api 使用queryperformancecounter() 和 queryperformancefrequency() 方法支援高精度計時。

這些方法,比「標準的」毫秒精度的計時方法如 gettickcount() 之類有高得多的精度。另一方面來說,在 c# 中使用「非託管」的 api 函式會有一定的開銷,但比起使用一點都不精確的 gettickcount() api 函式來說要好得多了。 

第乙個函式 queryperformancecounter() 查詢任意時刻高精度計數器的實際值。第二個函式 queryperformancefrequency() 返回高精度計數器每秒的計數值。為了獲得某一**段經歷的時間,你需要獲得**段開始前和結束後這兩個計時時刻的高精度計數器實際值。這兩個值的差指出了**段執行所經歷的時間。

然後通過將差除以每秒計數值(高精度計時器頻率),就可以計算經過的時間了。

duration = (stop - start) / frequency

經過時間 = (停止時間 - 開始時間) / 頻率

需要關於 queryperformancecounter 和 queryperformancefrequency 的更多資訊,請參閱 msdn 文件。

下面的類實現了 queryperformancecounter() 和 queryperformancefrequency() api 函式的功能.

using system;

using system.runtime.interopservices;

using system.componentmodel;

using system.threading;

namespace win32}//

開始計時器

public

void start()

//停止計時器

public

void stop()

//返回計時器經過時間(單位:秒)

public

double duration

}}}

使用這個類很簡單。只需要建立乙個 hiperftimer 的例項,然後呼叫 start() 開始計時,stop() 停止計時。要獲得經過的時間,呼叫 duration()函式即可。

參考下面的例子。

hiperftimer pt = 

new hiperftimer();

//建立新的 hiperftimer 物件

pt.start();

//啟動計時器

console.writeline(

"test\n

");

//需要計時的**

pt.stop();

//停止計時器

console.writeline(

"duration: sec\n

", pt.duration);

//列印需要計時部分**的用時

以上介紹的就是c#三種效能分析計時器,希望對你有所幫助。

C 計時器的三種使用方法

system.timers.timer t new system.timers.timer 5000 設定時間間隔為5秒 private void form1 load object sender,eventargs e private void btnstart click object send...

C 計時器的三種使用方法

在.net中有三種計時器,一是system.windows.forms命名空間下的timer控制項,它直接繼承自componet 二是system.timers命名空間下的timer類。timer控制項 timer控制項只有繫結了tick事件,和設定enabled true後才會自動計時,停止計時可...

C 裡面的三種定時計時器 Timer

在.net中有三種計時器 1 system.windows.forms命名空間下的timer控制項,它直接繼承自componet。timer控制項只有繫結了tick事件和設定enabled true後才會自動計時,停止計時可以用stop 方法控制,通過stop 停止之後,如果想重新計時,可以用sta...