mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2025-02-23 15:54:30 +00:00
goos: linux goarch: amd64 pkg: github.com/nspcc-dev/neo-go/pkg/io cpu: AMD Ryzen 7 PRO 7840U w/ Radeon 780M Graphics BenchmarkWriteArray/WriteArray_method,_value-16 2419993 506.1 ns/op 184 B/op 11 allocs/op BenchmarkWriteArray/WriteArray_method,_pointer-16 4159906 294.7 ns/op 24 B/op 1 allocs/op BenchmarkWriteArray/WriteArray_generic,_value-16 9217713 128.8 ns/op 0 B/op 0 allocs/op BenchmarkWriteArray/WriteArray_generic,_pointer-16 9575917 131.8 ns/op 0 B/op 0 allocs/op BenchmarkWriteArray/open-coded,_value-16 9100132 131.4 ns/op 0 B/op 0 allocs/op BenchmarkWriteArray/open-coded,_pointer-16 9153250 131.9 ns/op 0 B/op 0 allocs/op PASS ok github.com/nspcc-dev/neo-go/pkg/io 541.663s Signed-off-by: Roman Khimov <roman@nspcc.ru>
98 lines
1.8 KiB
Go
98 lines
1.8 KiB
Go
package io
|
|
|
|
import (
|
|
"slices"
|
|
"testing"
|
|
)
|
|
|
|
type someval struct {
|
|
a int
|
|
b int
|
|
}
|
|
|
|
func (s someval) EncodeBinary(w *BinWriter) {
|
|
w.WriteU64LE(uint64(s.a))
|
|
w.WriteU64LE(uint64(s.b))
|
|
}
|
|
|
|
type somepoint struct {
|
|
a int
|
|
b int
|
|
}
|
|
|
|
func (s *somepoint) EncodeBinary(w *BinWriter) {
|
|
w.WriteU64LE(uint64(s.a))
|
|
w.WriteU64LE(uint64(s.b))
|
|
}
|
|
|
|
func BenchmarkWriteArray(b *testing.B) {
|
|
const numElems = 10
|
|
var (
|
|
v = slices.Repeat([]someval{{}}, numElems)
|
|
p = slices.Repeat([]*somepoint{{}}, numElems)
|
|
)
|
|
|
|
w := NewBufBinWriter()
|
|
w.Grow(numElems * 32) // more than needed, we don't need reallocations here.
|
|
|
|
b.Run("WriteArray method, value", func(b *testing.B) {
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
b.StopTimer()
|
|
w.Reset()
|
|
b.StartTimer()
|
|
w.WriteArray(v)
|
|
}
|
|
})
|
|
b.Run("WriteArray method, pointer", func(b *testing.B) {
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
b.StopTimer()
|
|
w.Reset()
|
|
b.StartTimer()
|
|
w.WriteArray(p)
|
|
}
|
|
})
|
|
b.Run("WriteArray generic, value", func(b *testing.B) {
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
b.StopTimer()
|
|
w.Reset()
|
|
b.StartTimer()
|
|
WriteArray(w.BinWriter, v)
|
|
}
|
|
})
|
|
b.Run("WriteArray generic, pointer", func(b *testing.B) {
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
b.StopTimer()
|
|
w.Reset()
|
|
b.StartTimer()
|
|
WriteArray(w.BinWriter, p)
|
|
}
|
|
})
|
|
b.Run("open-coded, value", func(b *testing.B) {
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
b.StopTimer()
|
|
w.Reset()
|
|
b.StartTimer()
|
|
w.WriteVarUint(uint64(len(v)))
|
|
for i := range v {
|
|
v[i].EncodeBinary(w.BinWriter)
|
|
}
|
|
}
|
|
})
|
|
b.Run("open-coded, pointer", func(b *testing.B) {
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
b.StopTimer()
|
|
w.Reset()
|
|
b.StartTimer()
|
|
w.WriteVarUint(uint64(len(p)))
|
|
for i := range v {
|
|
p[i].EncodeBinary(w.BinWriter)
|
|
}
|
|
}
|
|
})
|
|
}
|