我嘗試分析我的go庫,找出在C++中比同類事物慢得多的原因。Golang分析 - top10只顯示一行100%
我簡單的基準
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返回編碼數據,我們的二進制表示我自定義的作家,甚至對其進行壓縮,並寫入文件系統。
運行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的應用程序,並在http://blog.golang.org/profiling-go-programs但顯示添加pprof.StartCPUProfile(f)
相同的結果。
我在做什麼錯,我怎樣才能確定什麼是我的lib的瓶頸? 預先感謝您
爲什麼使用「i <1000」?基準測試必須使用b.N字段,否則他們不會給出正確的結果,因爲每個基準測試函數都可能被多次調用b.N.的不同值。 – nussjustin
好的,我會修復 – sejvlond