經常我寫乙個類,作為乙個工具類,小夥伴會問我這個類的效能,這時我就需要乙個標準的工具進行測試。
現在在 github 提交**,如果有小夥伴想要知道某個函式的效能,就會用 benchmarkdotnet 進行測試。
例如我有乙個函式 stooter ,我定義這個函式的效能是非常高,我需要告訴大家在什麼的裝置執行,但是因為每個人的寫法不一樣,所以就比較難看。而且誰也不知道你是如何測試,也許使用 stopwatch 或 datetime 來測試。
但是在 github 經常可以看到下面的測試
benchmarkdotnet=v0.10.14, os=windows 10.0.17134
intel core i7-6700 cpu 3.40ghz (skylake), 1 cpu, 8 logical and 4 physical cores
.net core sdk=2.1.201
[host] : .net core 2.0.7 (coreclr 4.6.26328.01, corefx 4.6.26403.03), 64bit ryujit [attacheddebugger]
defaultjob : .net core 2.0.7 (coreclr 4.6.26328.01, corefx 4.6.26403.03), 64bit ryujit
1 2
3 4
5 6
7 8
method mean error stddev
stooter 384.6 ns 7.687 ns 9.721 ns
這就是使用工具 benchmarkdotnet 進行測試。
下面讓我告訴大家如何入門 benchmarkdotnet 進行測試。
首先通過 nuget 安裝 benchmarkdotnet ,推薦使用命令列安裝的方法,因為visualstudio的速度太慢
install-package benchmarkdotnet
1 先來寫乙個被測試的函式
public class foo
}} 1 2
3 4
5 6
7 8
9 10
11 12
13 14
1 2
3 4
5 6
7 8
9 10
11 12
13 在被測試的函式上面加上特性 benchmark ,注意引用using benchmarkdotnet.attributes才可以這樣寫
函式用了 span ,請看c# span 入門
現在可以在 main 函式使用下面**進行測試
var bokar = benchmarkrunner.run();
1
2 1
注意需要引用using benchmarkdotnet.running,並且在 release 執行
執行的時候就可以看到顯示很多測試,而且從輸入的資料夾還可以找到這樣的檔案,這個檔案放在 $(bin)release\$(targetframework)\benchmarkdotnet.artifacts\ 資料夾,直接開啟就可以找到
這時看到的就是標準的測試,可以把這個測試告訴小夥伴
那麼這個輸出**是什麼意思,例如測試了 csdn 方法,這時的輸出**請看下面
method mean error stddev
csdn 384.6 ns 7.687 ns 9.721 ns
mean 的意思是 arithmetic mean of all measurements 所有測量的算術平均值
error 的意思是 half of 99.9% confidence interval 99.9% 一半的置信度區間
stddev 是所有測量的標準偏差
在測試過程包括
pilot: 決定執行幾次。
idlewarmup, idletarget:評估benchmarkdotnet這個工具帶來的額外開銷。
mainwarmup:測試熱身。
maintarget:測試。
result:測試結果減去benchmarkdotnet帶來的額外開銷。
除了方法可以測試,靜態方法也可以測試,使用方法和上面一樣
public class foo
}} 1 2
3 4
5 6
7 8
9 10
11 12
13 14
1 2
3 4
5 6
7 8
9 10
11 12
13 如果在執行出現下面輸出,那麼請檢查是否在 release 執行,右擊專案屬性看是否開啟優化**
validating benchmarks:
assembly merrear which defines benchmarks is non-optimized
benchmark was built without optimization enabled (most probably a debug configuration). please, build it in release
1 2
3 參見:.net core效能測試元件benchmarkdotnet 支援.net framework mono - linezero -
用benchmarkdotnet給c#程式做效能測試
效能測試標準
1.cpu利用率小於40 2.記憶體占用小於80 3.processor queue length小於2 4.response time小於1s 5.吞吐量throughtput大於90 6.業務執行的平均響應時間 期望值 15s 1.吞吐量 單位時間內網路傳輸資料量 2.衝突率 在乙太網上監測到的...
Jmeter效能測試 標準效能測試場景設計
如何設計測試場景是效能測試中比較關鍵的內容。在效能測試領域有幾個教科書一樣的場景設計方法,放之四海而皆準 目的單業務基準測試是在伺服器沒有壓力的情況下,獲取單筆業務的處理時間,為後續調優提供資料依託 策略jmeter中設定為單個執行緒迭代n次 如100 取平均響應時間。一般情況下我們不需要監控硬體資...
效能測試通過標準
對於效能測試,在測試過程中需要通過觀察一些目標,根據這些目標的結果來判斷是否滿足要求,主要包含如下 業內對於效能測試有一些通用的通過標準,這裡給出乙個web專案效能測試通過標準,作為樣板 基本都遵循2 5 10,2s以內最佳 說明 另外需要強調的是,每個專案對於是否通過的標準不盡相同,實際執行中,優...