跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

如何在Golang中进行基准测试_Benchmark测试性能测量方法

Go语言中基准测试通过testing.B可精准测函数性能,需以Benchmark开头、用b.N循环、防编译优化,运行go test -bench=.查看ns/op等指标,配合-benchmem分析内存分配。 在Go语言中进行基准测试是优化代码性能的重要手段。通过
testing
包提供的
Benchmark
功能,可以准确测量函数的执行时间与资源消耗,帮助开发者识别 性能瓶颈 。 编写基本的Benchmark函数 基准测试函数与单元测试类似,但函数名以
Benchmark
开头,并接收
*testing.B
参数。运行时,Go会自动调用该函数多次(由系统动态调整),以获得稳定的性能数据。 示例:测试一个简单加法函数的性能 func BenchmarkAdd(b *testing.B) {for i := 0; i < b.N; i++ {Add(1, 2)}} b.N 表示循环执行次数,Go会自动调整它,直到获得足够精确的时间统计。 立即学习 “ go语言免费学习笔记(深入) ”; 运行基准测试并解读结果 使用命令行运行基准测试: go test -bench=. 输出示例如下: BenchmarkAdd-8 1000000000 0.345 ns/op 含义: BenchmarkAdd-8 :测试名称,8代表GOMAXPROCS值 1000000000 :执行了10亿次循环 0.345 ns/op :每次操作耗时约0.345纳秒 这个数值越小,说明函数性能越高。 go语言参考手册 中文CHM版 Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。本文给大家带来Go参考手册,需要的可以来下载! Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 Go 语言特色 简洁、快速、安全 并行、有趣、开源 内存管理、v数组安全、编译 下载 控制测试时间和内存分配 可以通过额外参数控制基准测试的行为: -benchtime=1s :指定每个基准测试运行至少1秒(默认) -count=3 :重复执行3次取平均值,提高准确性 -benchmem :显示内存分配情况 例如: go test -bench=. -benchmem 输出中会新增两列: BenchmarkAdd-8 1000000000 0.345 ns/op 0 B/op 0 allocs/op 0 B/op 表示每次操作未分配内存, 0 allocs/op 表示无内存分配操作。这两个值越低越好。 避免编译器优化影响测试结果 有时Go编译器会优化掉“无意义”的计算,导致测试失真。为防止这种情况,应将函数结果赋值给
blackhole
变量
b.ResetTimer()
前后可手动控制计时范围。 正确做法: func BenchmarkAdd(b *testing.B) {var result intfor i := 0; i < b.N; i++ {result = Add(1, 2)}_ = result // 防止被优化掉} 或使用
runtime.GC()
在测试前触发垃圾回收,减少干扰。 基本上就这些。写好Benchmark能帮你发现细微性能差异,尤其在对比不同算法实现时非常有用。不复杂但容易忽略细节。

相关文章