我正在尝试对需要昂贵准备工作的操作进行基准测试,我将使用 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 的基准测试启发式是根据基准时间而不是总时间来限制 bN 的。它最终要求第 100 次插入的 5MM(5000000)次迭代,这花费了比合理时间更多的时间(我想以第 1000 万次项目插入为基准)。有没有办法在 Go 的基准测试工具中为特定的基准指定最大 bN?我自己在文档中没有找到任何内容。
2 回答
噜噜哒
TA贡献1784条经验 获得超7个赞
设置显式迭代计数(100 次):
go test -bench=. -benchtime=100x
指定时间(10 秒):
go test -bench=. -benchtime=10s
b.N
在 Go Benchmarking 中限制迭代次数 ( ):
从Go 1.12开始:
该
-benchtime
标志现在支持设置显式迭代计数,而不是值以“x”结尾的时间。例如,-benchtime=100x
运行基准测试 100 次。
蛊毒传说
TA贡献1895条经验 获得超3个赞
-benchtime
标志可用于指定要运行基准测试的时间 ( source )。虽然我还没有尝试过,但提供低于 1 秒的时间值应该可以解决问题。
go test -bench=. -benchtime=10s
- 2 回答
- 0 关注
- 102 浏览
添加回答
举报
0/150
提交
取消