Skip to content

Instantly share code, notes, and snippets.

@knsh14
Created February 19, 2018 18:05
Show Gist options
  • Save knsh14/6f02536c1ef1863f9ad67f33995e52a7 to your computer and use it in GitHub Desktop.
Save knsh14/6f02536c1ef1863f9ad67f33995e52a7 to your computer and use it in GitHub Desktop.
golang 1.10.0 strings.Builder benchmark
goos: linux
goarch: amd64
pkg: github.com/knsh14/sample
BenchmarkBytesBufferString/10-2 100000 12086 ns/op 1984 B/op 13 allocs/op
BenchmarkBytesBufferString/50-2 100000 17160 ns/op 7744 B/op 53 allocs/op
BenchmarkBytesBufferString/100-2 100000 24451 ns/op 14944 B/op 103 allocs/op
BenchmarkBytesBufferString/200-2 50000 30369 ns/op 29344 B/op 203 allocs/op
BenchmarkBytesBufferString/500-2 30000 56428 ns/op 72544 B/op 503 allocs/op
BenchmarkStringsBuilderString/10-2 200000 9501 ns/op 256 B/op 5 allocs/op
BenchmarkStringsBuilderString/50-2 200000 8830 ns/op 256 B/op 5 allocs/op
BenchmarkStringsBuilderString/100-2 200000 9074 ns/op 256 B/op 5 allocs/op
BenchmarkStringsBuilderString/200-2 200000 9874 ns/op 256 B/op 5 allocs/op
BenchmarkStringsBuilderString/500-2 100000 10186 ns/op 256 B/op 5 allocs/op
----
BenchmarkBytesBufferWriteString/10-2 200000 9678 ns/op 336 B/op 3 allocs/op
BenchmarkBytesBufferWriteString/50-2 100000 12116 ns/op 1472 B/op 5 allocs/op
BenchmarkBytesBufferWriteString/100-2 100000 14234 ns/op 2976 B/op 6 allocs/op
BenchmarkBytesBufferWriteString/200-2 100000 17745 ns/op 5984 B/op 7 allocs/op
BenchmarkBytesBufferWriteString/500-2 50000 47359 ns/op 13536 B/op 8 allocs/op
BenchmarkStringsBuilderWriteString/10-2 200000 9035 ns/op 256 B/op 5 allocs/op
BenchmarkStringsBuilderWriteString/50-2 100000 11519 ns/op 1024 B/op 7 allocs/op
BenchmarkStringsBuilderWriteString/100-2 100000 11835 ns/op 2048 B/op 8 allocs/op
BenchmarkStringsBuilderWriteString/200-2 100000 14784 ns/op 4096 B/op 9 allocs/op
BenchmarkStringsBuilderWriteString/500-2 100000 24236 ns/op 15104 B/op 12 allocs/op
---
BenchmarkGrownBytesBufferWriteString/10-2 200000 9725 ns/op 336 B/op 3 allocs/op
BenchmarkGrownBytesBufferWriteString/50-2 200000 11096 ns/op 1424 B/op 4 allocs/op
BenchmarkGrownBytesBufferWriteString/100-2 100000 12717 ns/op 2736 B/op 4 allocs/op
BenchmarkGrownBytesBufferWriteString/200-2 100000 14994 ns/op 5488 B/op 4 allocs/op
BenchmarkGrownBytesBufferWriteString/500-2 100000 21042 ns/op 13424 B/op 4 allocs/op
BenchmarkGrownStringsBuilderWriteString/10-2 200000 8950 ns/op 192 B/op 2 allocs/op
BenchmarkGrownStringsBuilderWriteString/50-2 200000 14460 ns/op 960 B/op 2 allocs/op
BenchmarkGrownStringsBuilderWriteString/100-2 100000 11890 ns/op 1920 B/op 2 allocs/op
BenchmarkGrownStringsBuilderWriteString/200-2 100000 15090 ns/op 2816 B/op 2 allocs/op
BenchmarkGrownStringsBuilderWriteString/500-2 100000 21612 ns/op 7168 B/op 2 allocs/op
PASS
ok github.com/knsh14/sample/hoge 590.626s
package main
import (
"bytes"
"fmt"
"strings"
"testing"
)
func BenchmarkBytesBufferString(b *testing.B) {
for _, n := range []int{10, 50, 100, 200, 500} {
b.Run(fmt.Sprintf("%d", n), func(b *testing.B) {
for i := 0; i < b.N; i++ {
b.StopTimer()
b.StartTimer()
var buf bytes.Buffer
for i := 0; i < 10; i++ {
buf.WriteString("sample\n")
}
for i := 0; i < 10; i++ {
buf.WriteString("sample\n")
}
for i := 0; i < n; i++ {
_ = buf.String()
}
}
})
}
}
func BenchmarkStringsBuilderString(b *testing.B) {
for _, n := range []int{10, 50, 100, 200, 500} {
b.Run(fmt.Sprintf("%d", n), func(b *testing.B) {
for i := 0; i < b.N; i++ {
b.StopTimer()
b.StartTimer()
var buf strings.Builder
for i := 0; i < 10; i++ {
buf.WriteString("sample\n")
}
for i := 0; i < n; i++ {
_ = buf.String()
}
}
})
}
}
func BenchmarkBytesBufferWriteString(b *testing.B) {
for _, n := range []int{10, 50, 100, 200, 500} {
b.Run(fmt.Sprintf("%d", n), func(b *testing.B) {
for i := 0; i < b.N; i++ {
b.StopTimer()
b.StartTimer()
var buf bytes.Buffer
for i := 0; i < n; i++ {
buf.WriteString("sample\n")
}
_ = buf.String()
}
})
}
}
func BenchmarkStringsBuilderWriteString(b *testing.B) {
for _, n := range []int{10, 50, 100, 200, 500} {
b.Run(fmt.Sprintf("%d", n), func(b *testing.B) {
for i := 0; i < b.N; i++ {
b.StopTimer()
b.StartTimer()
var buf strings.Builder
for i := 0; i < n; i++ {
buf.WriteString("sample\n")
}
_ = buf.String()
}
})
}
}
func BenchmarkGrownBytesBufferWriteString(b *testing.B) {
for _, n := range []int{10, 50, 100, 200, 500} {
b.Run(fmt.Sprintf("%d", n), func(b *testing.B) {
for i := 0; i < b.N; i++ {
b.StopTimer()
b.StartTimer()
var buf bytes.Buffer
buf.Grow(n * 6)
for i := 0; i < n; i++ {
buf.WriteString("sample\n")
}
_ = buf.String()
}
})
}
}
func BenchmarkGrownStringsBuilderWriteString(b *testing.B) {
for _, n := range []int{10, 50, 100, 200, 500} {
b.Run(fmt.Sprintf("%d", n), func(b *testing.B) {
for i := 0; i < b.N; i++ {
b.StopTimer()
b.StartTimer()
var buf strings.Builder
buf.Grow(n * 6)
for i := 0; i < n; i++ {
buf.WriteString("sample\n")
}
_ = buf.String()
}
})
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment