我尝试分析我的 go 库,以找出比 C++ 中的同一件事慢得多的原因。
我有简单的基准
func BenchmarkFile(t *testing.B) {
tmpFile, err := ioutil.TempFile("", TMP_FILE_PREFIX)
fw, err := NewFile(tmpFile.Name())
text := []byte("testing")
for i := 0; i < b.N; i++ {
_, err = fw.Write(text)
}
fw.Close()
}
NewFile 返回我的自定义 Writer,它将数据编码为我们的二进制表示,甚至压缩它们,并写入文件系统。
运行go test -bench . -memprofile mem.out -cpuprofile cpu.out我得到
PASS
BenchmarkFile-16 2000000000 0.20 ns/op
ok .../writer/iowriter 9.074s
比分析它
# go tool pprof cpu.out
Entering interactive mode (type "help" for commands)
(pprof) top10
930ms of 930ms total ( 100%)
flat flat% sum% cum cum%
930ms 100% 100% 930ms 100%
(pprof)
我什至尝试编写使用我的编写器的 example.go 应用程序,并添加pprof.StartCPUProfile(f)如http://blog.golang.org/profiling-go-programs 中所示的内容,但结果相同。
我做错了什么,我如何确定我的库的瓶颈是什么?先感谢您
米脂
一只名叫tom的猫
相关分类