Last active
August 29, 2015 14:08
-
-
Save dictav/0a439b49327ab5a00c46 to your computer and use it in GitHub Desktop.
benchmark for writing to buffer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)...) | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
書き込むサイズ変えると差が出る。
実行する順番で結果が変わる