Skip to content

Instantly share code, notes, and snippets.

@lavoiesl
Created March 23, 2020 14:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lavoiesl/4cd5889b1e888ff939da9373da4f5c66 to your computer and use it in GitHub Desktop.
Save lavoiesl/4cd5889b1e888ff939da9373da4f5c66 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"math/rand"
"strings"
"testing"
)
const alphabet = "abcdefghijklmnopqrstuvwxyz0123456789"
const alphabetSize = 36
func BenchmarkStr(b *testing.B) {
lengths := []int{1, 10, 100, 1000, 10000, 100000}
for _, length := range lengths {
b.Run(fmt.Sprintf("byte array %d", length), func(b *testing.B) {
random := rand.New(rand.NewSource(0))
for i := 0; i < b.N; i++ {
value := make([]byte, length)
for i := 0; i < length; i++ {
value[i] = alphabet[random.Intn(alphabetSize)]
}
_ = string(value)
}
})
b.Run(fmt.Sprintf("concat %d", length), func(b *testing.B) {
random := rand.New(rand.NewSource(0))
for i := 0; i < b.N; i++ {
value := ""
for i := 0; i < length; i++ {
value += string(alphabet[random.Intn(alphabetSize)])
}
_ = value
}
})
b.Run(fmt.Sprintf("string builder %d", length), func(b *testing.B) {
random := rand.New(rand.NewSource(0))
for i := 0; i < b.N; i++ {
var sb strings.Builder
for i := 0; i < length; i++ {
sb.WriteByte(alphabet[random.Intn(alphabetSize)])
}
_ = sb.String()
}
})
b.Run(fmt.Sprintf("string builder + grow %d", length), func(b *testing.B) {
random := rand.New(rand.NewSource(0))
for i := 0; i < b.N; i++ {
var sb strings.Builder
sb.Grow(length)
for i := 0; i < length; i++ {
sb.WriteByte(alphabet[random.Intn(alphabetSize)])
}
_ = sb.String()
}
})
}
}
  Length Count ns/op ns/op/length B/op B/op/length allocs/op
byte array       17   1.8  
  1 38169398 30.2 30 1 1.0 1
  10 6827912 165 17 16 1.6 1
  100 834948 1457 15 224 2.2 2
  1000 85670 13922 14 2048 2.0 2
  10000 8769 136396 14 20480 2.0 2
  100000 832 1369405 14 212999 2.1 2
concat       1847   9834.4  
  1 42378474 24.4 24 0 0.0 0
  10 2347600 502 50 64 6.4 9
  100 158595 7071 71 5728 57.3 99
  1000 6658 178428 178 530342 530.3 999
  10000 96 11822332 1182 53164283 5316.4 10001
  100000 2 957450730 9575 5309586624 53095.9 100241
String builder       20   4.1  
  1 27875820 39.4 39 8 8.0 1
  10 5805525 205 21 24 2.4 2
  100 707866 1679 17 248 2.5 5
  1000 79156 14888 15 2040 2.0 8
  10000 6871 153444 15 48505 4.9 17
  100000 799 1504200 15 505858 5.1 25
String builder + grow       18   1.1  
  1 33155168 33.4 33 1 1.0 1
  10 6849759 175 18 16 1.6 1
  100 720225 1502 15 112 1.1 1
  1000 81234 14903 15 1024 1.0 1
  10000 7467 147579 15 10240 1.0 1
  100000 798 1475910 15 106503 1.1 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment