我正在嘗試對需要昂貴準備工作的操作進行基準測試,我將使用 StopTimer() 和 StartTimer() 排除在外。具體來說,我正在對第 n 個項目插入排序列表進行基準測試。示例代碼:n := 100// Run the process b.N timesfor i := 0; i < b.N; i++ { // Stop the timer for our expensive preparation work (inserting n-1 items) b.StopTimer() // ... // Insert n-1 items for j := 1; j < n; j++ { m.InsertItem(o) } // ... // Resume the timer b.StartTimer() // Insert the nth item m.InsertItem(o)}問題是 Go 的基準測試啟發(fā)式是根據(jù)基準時間而不是總時間來限制 bN 的。它最終要求第 100 次插入的 5MM(5000000)次迭代,這花費了比合理時間更多的時間(我想以第 1000 萬次項目插入為基準)。有沒有辦法在 Go 的基準測試工具中為特定的基準指定最大 bN?我自己在文檔中沒有找到任何內(nèi)容。
2 回答

嚕嚕噠
TA貢獻1784條經(jīng)驗 獲得超7個贊
設置顯式迭代計數(shù)(100 次):
go?test?-bench=.?-benchtime=100x
指定時間(10 秒):
go?test?-bench=.?-benchtime=10s
b.N
在 Go Benchmarking 中限制迭代次數(shù) ( ):
從Go 1.12開始:
該
-benchtime
標志現(xiàn)在支持設置顯式迭代計數(shù),而不是值以“x”結尾的時間。例如,-benchtime=100x
運行基準測試 100 次。

蠱毒傳說
TA貢獻1895條經(jīng)驗 獲得超3個贊
-benchtime
標志可用于指定要運行基準測試的時間 (?source?)。雖然我還沒有嘗試過,但提供低于 1 秒的時間值應該可以解決問題。
go test -bench=. -benchtime=10s
- 2 回答
- 0 關注
- 146 瀏覽
添加回答
舉報
0/150
提交
取消