自製效能測試類

2021-08-26 07:24:48 字數 1410 閱讀 3208

商業軟體包往往**昂貴,並且需要乙個過程之後才能有效地使用它們。針對這一點,本文擬實現乙個簡單有效的類,它能自動計算並報告函式、迴圈和**塊執行的時間。

自動化與簡易性設計

利用類物件建構函式和析構函式的執行特性(它們分別在宣告和銷毀時執行),效能測試類的計時是在建構函式開始的,計算與報告某個操作的執行時間是在析構函式中進行的。測試儀提供毫秒級的結果。實現過程中將使用clock()返回程式開始後的處理器時鐘時間(與平台相關的時間單位)。巨集clk_tck表示特定機器每秒時鐘數。

效能測試類定義如下:

#include class stopwatch //開始計時 ~stopwatch(); private: clock_t start; };

建構函式將成員start初始化為當前的時鐘。除了析構函式外沒有定義其它的成員函式。析構函式再次呼叫clock(),計算構造物件後經過的時間並顯示結果:

注意clock_t和clk_tck是整數。因此在進行除法操作前必須將它們轉換成double型別。為了延時螢幕輸出,在析構函式中可以加上下列**:

char dummy; cin >>dummy; //延時螢幕輸出

另外也可以將不同效能側面的結果寫入效能日誌檔案。

用所建立的類測試效能

為了對**塊進行測試,先在**塊的開始建立乙個本地類例項,假設要測試的**是下列迴圈:

string *pstr[5000]; //指標陣列 for (int i=0;i<5000;i++)

此迴圈在堆中分配5000個串物件。

用大括弧將上面的**塊括起來並在**塊開始宣告類物件例項:

} // 摧毀計時器並報告結果

根據上面的**段,當**開始執行時,計時也開始,當**退出時,析構函式便顯示結果:

轉換成秒數: 0.027

迴圈在執行這段**的機器上耗時27毫秒。現在對上面的**段稍做改動,使用棧動態分配記憶體會得到什麼樣的效能資料呢?

}這段**執行結果為:

轉換成秒數: 0.014

可以看出,用棧代替堆分配記憶體速度提高了50%。而且使用堆記憶體的**還不包括銷毀5000個串所用的時間。使用棧記憶體的**不存在這個問題。由此很容易看出效能差別。

另外,使用堆記憶體的**還有5000個賦值操作:

pstr[i] = new string;

將**改動一下:

}通常的**是不能這樣寫的-原因是這樣的**造成嚴重的記憶體溢位。但它把分配操作與其它的變數隔離開了。這段**不是以賦值方式進行堆記憶體分配,這是效能調整時常用的方法,其執行結果如下:

轉換成秒數: 0.027

也就是說賦值不影響效能。

效能測試常常需要一些技術實踐。開發人員的直覺常會令人誤入歧途-直觀上開銷很大的操作往往對效能影響不大,而一些表面上無所謂的操作象動態記憶體分配證明了在記憶體開銷上對cpu的依賴。所以說如果沒有可靠的效能測試作為手段,我們是很難發現效能事實的。

自製效能測試類

自製效能測試類 商業軟體包往往 昂貴,並且需要乙個過程之後才能有效地使用它們。針對這一點,本文擬實現乙個簡單有效的類,它能自動計算並報告函式 迴圈和 塊執行的時間。自動化與簡易性設計 利用類物件建構函式和析構函式的執行特性 它們分別在宣告和銷毀時執行 效能測試類的計時是在建構函式開始的,計算與報告某...

效能測試 效能測試步驟

針對此次庫內作業效能測試,梳理一下期間的工作流程 梳理已有的介面指令碼,確認需要做效能測試的幾個介面,即使用率高,對效能有要求的幾個主要介面。結合頁面的操作,和確認的介面,梳理具體的業務邏輯 同時,請開發人員部署了測試環境。測試環境的伺服器指標,盡量和生產環境一致。部署的時候,負載均衡等情況也盡量和...

效能測試之前端效能測試

本次總結總共分為以下部分 1.如何衡量乙個系統是否要做壓測 2.壓測的準備過程 3.壓測工具選擇 4.壓測資料以及報告結果相關 1.如何衡量乙個系統是否要做壓測 首先需要衡量乙個系統是否需要壓測,從以下角度考慮 從兩個角度進行分析 a.業務角度 明確系統是對內使用還是對外使用,使用人數是多少,如果使...