go - 在 Go Benchmarks 中将设置/拆卸放在哪里?
问题描述
我有一个 go test 文件,我在其中编写了一个基准函数,如下所示:
func BenchmarkStuff(b *testing.B) {
for i := 0; i < b.N; i++ {
stuff()
}
}
但是,该stuff()
功能需要在每次运行前进行一些设置,并在每次运行后进行清理。我有功能setup()
并且cleanup()
分别执行此操作。但我不想对设置和清理功能进行基准测试。
那么它们应该在哪里调用呢?如果我在 BenchmarkStuff 中调用它们,它们将被添加到结果测量中。但没有他们,stuff()
就会失败。
解决方案
基准测试包提供了避免基准测试所需的时序初始化的方法ResetTimer
。StopTimer
StartTimer
如果需要初始化一次,ResetTimer
请在开始循环之前使用:
func BenchmarkStuff(b *testing.B) {
setup()
b.ResetTimer()
for i := 0; i < b.N; i++ {
stuff()
}
}
如果您需要在循环期间重新初始化,您可以使用StopTimer
andStartTimer
来避免对该部分进行计时:
func BenchmarkStuff(b *testing.B) {
for i := 0; i < b.N; i++ {
b.StopTimer()
setup()
b.StartTimer()
stuff()
}
}
推荐阅读
- javascript - 用户按下回车键或单击其他地方后如何从 html 输入中获取数据?
- iterator - 如何在 Julia 中对多个矩阵进行元素 OR?
- c - vs代码在通常的黑色弹出输出屏幕中未显示结果
- node.js - 当我的代码在线时如何读取我的 .env 文件
- c - __isoc99_sscanf() 有什么作用?
- java - 我需要这个布尔值来给我最低的卡片价值并打印第一张最低的卡片。当我使用这种方法时,它给了我最后一张卡片的价值
- scala - 无法在 Spark-Scala 中执行用户定义的函数
- bash - 我可以创建一个每 30 天准确激活一次的 systemd 计时器 (Linux) 并继续计算重新启动吗?
- java - 在 Spark/Scala 中将 Lucene 索引文件写入 HDFS
- swift - 使用 Swifty 传感器和 Wahoo 的自行车动力服务扩展设置训练器阻力