登录
首页 >  Golang >  Go问答

Go Benchmarks 的设置和拆卸位置在何处?

来源:stackoverflow

时间:2024-02-15 20:36:23 417浏览 收藏

大家好,我们又见面了啊~本文《Go Benchmarks 的设置和拆卸位置在何处?》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

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

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

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

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


正确答案


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

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

func benchmarkstuff(b *testing.b) {
    setup()
    b.resettimer()
    for i := 0; i < b.n; i++ {
        stuff()
    }
}

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

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

理论要掌握,实操不能落!以上关于《Go Benchmarks 的设置和拆卸位置在何处?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>