猿问

是否可以限制 Go 基准测试中的迭代次数 (bN)?

我正在尝试对需要昂贵准备工作的操作进行基准测试,我将使用 StopTimer() 和 StartTimer() 排除在外。具体来说,我正在对第 n 个项目插入排序列表进行基准测试。


示例代码:


n := 100


// Run the process b.N times

for 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?我自己在文档中没有找到任何内容。


吃鸡游戏
浏览 103回答 2
2回答

噜噜哒

设置显式迭代计数(100 次):go test -bench=. -benchtime=100x指定时间(10 秒):go test -bench=. -benchtime=10sb.N在 Go Benchmarking 中限制迭代次数 ( ):从Go 1.12开始:该-benchtime标志现在支持设置显式迭代计数,而不是值以“x”结尾的时间。例如,-benchtime=100x运行基准测试 100 次。

蛊毒传说

-benchtime标志可用于指定要运行基准测试的时间 ( source )。虽然我还没有尝试过,但提供低于 1 秒的时间值应该可以解决问题。go test -bench=. -benchtime=10s
随时随地看视频慕课网APP

相关分类

Go
我要回答