Skip to content

Instantly share code, notes, and snippets.

@dictav
Last active August 29, 2015 14:08
Show Gist options
  • Save dictav/0a439b49327ab5a00c46 to your computer and use it in GitHub Desktop.
Save dictav/0a439b49327ab5a00c46 to your computer and use it in GitHub Desktop.
benchmark for writing to buffer
package buffer_benchmark
import (
"bufio"
"bytes"
"testing"
)
const hoge = "hogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehoge"
func TestBuffer(t *testing.T) {
n := 10
buf := []byte{}
for i := 0; i < n; i++ {
buf = append(buf, []byte(hoge)...)
}
var buffer bytes.Buffer
for i := 0; i < n; i++ {
buffer.Write([]byte(hoge))
}
var buffer2 bytes.Buffer
bio := bufio.NewWriter(&buffer2)
for i := 0; i < n; i++ {
bio.Write([]byte(hoge))
}
bio.Flush()
l1 := len(buf)
l2 := len(buffer.Bytes())
l3 := len(buffer2.Bytes())
if l1 != l2 || l1 != l3 {
t.Fatal(l1, l2, l3)
}
s1 := string(buf)
s2 := string(buffer.Bytes())
s3 := string(buffer2.Bytes())
if s1 != s2 || s1 != s3 {
t.Fatal(s1, s2, s3)
}
}
func BenchmarkBufIO(b *testing.B) {
var buf bytes.Buffer
bio := bufio.NewWriter(&buf)
for i := 0; i < b.N; i++ {
bio.Write([]byte(hoge))
}
bio.Flush()
}
func BenchmarkBytes_(b *testing.B) {
var buf bytes.Buffer
for i := 0; i < b.N; i++ {
buf.Write([]byte(hoge))
}
}
func BenchmarkBuffer(b *testing.B) {
buf := []byte{}
for i := 0; i < b.N; i++ {
buf = append(buf, []byte(hoge)...)
}
}
dictav$ go test -benchmem -bench . hello
PASS
BenchmarkBuffer 1000000 1098 ns/op 2437 B/op 1 allocs/op
BenchmarkBytes_ 5000000 2150 ns/op 1758 B/op 1 allocs/op
BenchmarkBufIO 2000000 1512 ns/op 1489 B/op 1 allocs/op
ok buffer_benchmark 16.296s
---
dictav$ go test -benchmem -bench . hello
PASS
BenchmarkBytes_ 5000000 2050 ns/op 1758 B/op 1 allocs/op
BenchmarkBufIO 5000000 3106 ns/op 1274 B/op 1 allocs/op
BenchmarkBuffer 2000000 2958 ns/op 2883 B/op 1 allocs/op
ok buffer_benchmark 34.761s
---
dictav$ go test -benchmem -bench . hello
PASS
BenchmarkBufIO 2000000 602 ns/op 1489 B/op 1 allocs/op
BenchmarkBytes_ 5000000 2688 ns/op 1758 B/op 1 allocs/op
BenchmarkBuffer 500000 3261 ns/op 2485 B/op 1 allocs/op
ok buffer_benchmark 18.077s
---
dictav$ go test -benchmem -bench . hello
PASS
BenchmarkBytes_ 5000000 2591 ns/op 1758 B/op 1 allocs/op
BenchmarkBufIO 2000000 1894 ns/op 1489 B/op 1 allocs/op
BenchmarkBuffer 500000 2049 ns/op 2485 B/op 1 allocs/op
ok buffer_benchmark 19.551s
@dictav
Copy link
Author

dictav commented Oct 31, 2014

書き込むサイズ変えると差が出る。
実行する順番で結果が変わる

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment