在 Go Benchmarks 中设置/拆卸的位置在哪里?

Saq*_*Ali 1 go

我有一个 go test 文件,我在其中编写了一个基准函数,如下所示:

func BenchmarkStuff(b *testing.B) {
    for i := 0; i < b.N; i++ {
        stuff()
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,该stuff()函数每次运行前都需要进行一些设置,每次运行后都需要进行清理。我有功能setup()cleanup()分别执行此操作。但我不想对设置和清理功能进行基准测试。

那么应该在哪里调用它们呢?如果我在 BenchmarkStuff 中调用它们,它们将被添加到结果测量中。但没有它们,stuff()就会失败。

Jim*_*imB 5

基准测试包提供ResetTimerStopTimerStartTimer避免基准测试所需的计时初始化的方法。

如果需要初始化一次,请ResetTimer在开始循环之前使用:

func BenchmarkStuff(b *testing.B) {
    setup()
    b.ResetTimer()
    for i := 0; i < b.N; i++ {
        stuff()
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您需要在循环期间重新初始化,您可以使用StopTimerStartTimer避免计时该部分:

func BenchmarkStuff(b *testing.B) {
    for i := 0; i < b.N; i++ {
        b.StopTimer()
        setup()
        b.StartTimer()
        stuff()
    }
}
Run Code Online (Sandbox Code Playgroud)