Go言語の練習〜Benchmark
昨日書いたGoで文字列を適当に圧縮する関数のベンチマークを取ってみた。
package main import "testing" func BenchmarkCompressBadStrA(b *testing.B) { for i := 0; i < b.N; i += 1 { CompressBad(strA) } } func BenchmarkCompressBetterStrA(b *testing.B) { for i := 0; i < b.N; i += 1 { CompressBetter(strA) } } func BenchmarkCompressAlternateStrA(b *testing.B) { for i := 0; i < b.N; i += 1 { CompressAlternate(strA) } } func BenchmarkCompressBadStrB(b *testing.B) { for i := 0; i < b.N; i += 1 { CompressBad(strB) } } func BenchmarkCompressBetterStrB(b *testing.B) { for i := 0; i < b.N; i += 1 { CompressBetter(strB) } } func BenchmarkCompressAlternateStrB(b *testing.B) { for i := 0; i < b.N; i += 1 { CompressAlternate(strB) } }
$ go test -benchmem -bench . testing: warning: no tests to run PASS BenchmarkCompressBadStrA 1000000 1385 ns/op 128 B/op 13 allocs/op BenchmarkCompressBetterStrA 1000000 1034 ns/op 168 B/op 8 allocs/op BenchmarkCompressAlternateStrA 1000000 1113 ns/op 96 B/op 8 allocs/op BenchmarkCompressBadStrB 1000000 2183 ns/op 216 B/op 18 allocs/op BenchmarkCompressBetterStrB 1000000 1735 ns/op 208 B/op 10 allocs/op BenchmarkCompressAlternateStrB 1000000 1663 ns/op 128 B/op 10 allocs/op
やっぱ文字列を+で連結するよりは bytes.Bufferを使うほうが速いみたい。
runeのスライスを使うのとbytes.Bufferはあまり差が無い。