C 計算程式的執行時間

2021-09-08 23:27:24 字數 2895 閱讀 8795

///

/// 計算程式的執行時間

///

class

stopwatch 

public long elapsed() }

在程式的開始和結尾處分別加上  stopwatch

sw = new stopwatch

();    sw.start();   和    sw.elapsed();

sw.elapsed();的返回值就是程式的執行時間。

上面的**是.net1.1中使用的 可以參考下面.net2.0中的用法

《.net v2.0 下的高精度計數器 —— 

stopwatch》

無論你是搞技術研究還是搞專案開發,高精度的時間測量在很多場合下都是必需的。xiaotie 在其《dotnet下時間精度測量》提到了乙個 queryperfcounter,它對目前還在使用 microsoft .net framework v1.1 的開發人員來說的確是乙個好幫手。但若你已經用上了 microsoft .net framework v2.0,那麼 stopwatch

將會成為你進行高精度時間測量的不二選擇。

1. 測試 stopwatch

這裡,我借用一下 xiaotie 在《dotnet下時間精度測量》的測試**,並給出對應的執行結果:

// code #01

static void test1()

ms", sw.elapsedmilliseconds);

}// output:

//// stopwatch

時間精度:0ms

static void test2()

ms", sw.elapsedmilliseconds);}}

console.writeline("共進行次 stopwatch

的時間精度測試", loop);

console.writeline("其中次 stopwatch

的時間精度異常", excount);

console.writeline("時間校準有效性%", 100 - (100.0 * excount) / loop);

}// output:

//// 共進行10000次 stopwatch

的時間精度測試

// 其中0次 stopwatch

的時間精度異常

// 時間校準有效性100%

static void test3()

ms", sw.elapsedmilliseconds);

sw.reset();

sw.start();

int j = 0;

for (j = 0; j < i; j++)

sw.stop();

console.writeline("第次迴圈,耗時ms", i, sw.elapsedmilliseconds);

console.writeline();}}

// partial output:

//// stopwatch

時間精度:0ms

// 第10次迴圈,耗時0ms

//// stopwatch

時間精度:0ms

// 第12次迴圈,耗時0ms

//// stopwatch

時間精度:0ms

// 第16次迴圈,耗時0ms

從測試結果中可以看到,stopwatch

絕對能夠滿足挑剔的你!怎麼樣?手癢了嗎?

2. 應用 stopwatch

stopwatch

位於 system.diagnostics 命名空間中,它的使用方法非常簡單,只要你會用一般的計時器,你就會使用它。

2.1 建立例項

你可以通過 new 或者 stopwatch

.startnew() 來建立乙個 stopwatch

例項:// code #02

stopwatch

sw1 = new stopwatch

();stopwatch

sw2 = stopwatch

.startnew();

使用 startnew() 會建立乙個 stopwatch

例項並馬上開始計時,即等效於如下**:

// code #03

stopwatch

sw2 = new stopwatch

();sw2.start();

2.2 測量時間

// code #04

sw1.start();

// do something here

sw2.stop();

long elaspsedmilliseconds = sw1.elaspedmilliseconds;

2.3 應用示例

微軟官方提供了一系列示範程式用於演示 visual studio 2005,其中 basic class

library 部分帶有乙個 stopwatch

3. 深入 stopwatch

stopwatch

內部也呼叫了 queryperformancecounter() 和 queryperformancefrequency() 兩個函式,與 queryperfcounter 不同的是,當 stopwatch

檢測到當前的系統和硬體不支援高精度的計數器時,它將轉用我們所熟悉的 datetime 做法。

stopwatch

在其靜態構造器中呼叫 queryperformancefrequency(),透過該函式的返回值判斷當前的系統和硬體是否支援高精度的計數器,並設定 ishighresolution 屬性的值。stopwatch

內部用於計算時間間隔的主要方法都會根據 ishighresolution 的值來選擇合適的計算方法。有興趣的話,你可以使用 reflector **一下 stopwatch

的內部。

C 計算程式執行時間

通過系統函式system.datetime.now獲取執行前的當前時間和執行後的當前時間,然後通過datetime型別本身自帶的subtract方法 從此例項中減去指定時間或持續時間,datetime型別或timespan型別引數 用執行後時間減去執行前時間,獲得執行一段程式所需要的時間。具體 如下...

c 計算程式執行時間

c 中如何記錄程式執行時間 一 clock 計時函式 clock 是c c 中的計時函式,而與其相關的資料型別是clock t。在msdn中,查得對clock函式定義如下 clock t clock void 簡單而言,就是該程式從啟動到函式呼叫占用cpu的時間。這個函式返回從 開啟這個程式程序 到...

C 計算程式的執行時間

c 計算程式的執行時間 計算程式的執行時間 class stopwatch public long elapsed 在程式的開始和結尾處分別加上 stopwatch sw new stopwatch sw.start 和 sw.elapsed sw.elapsed 的返回值就是程式的執行時間。上面的...