1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 19:17:38 +08:00

NewWriterF with sync.Pool

多次写入,需要扩容时速度提升
This commit is contained in:
wdvxdr 2021-03-23 22:10:12 +08:00
parent f3beaae4e4
commit 207df5fc00
No known key found for this signature in database
GPG Key ID: 55FF1414A69CEBA6
2 changed files with 20 additions and 15 deletions

View File

@ -4,12 +4,12 @@ import (
"bytes"
"encoding/binary"
"encoding/hex"
"sync"
)
type Writer bytes.Buffer
/*
var bufferPool = sync.Pool{ // todo sync.Pool 无法通过单元测试
var bufferPool = sync.Pool{
New: func() interface{} {
return new(bytes.Buffer)
},
@ -27,7 +27,6 @@ func PutBuffer(buf *bytes.Buffer) {
bufferPool.Put(buf)
}
}
*/
func NewWriter() *Writer {
return new(Writer)
@ -40,9 +39,11 @@ func PutWriter(w *Writer) {
*/
func NewWriterF(f func(writer *Writer)) []byte {
w := new(bytes.Buffer)
w := NewBuffer()
f((*Writer)(w))
return w.Bytes()
b := append([]byte(nil), w.Bytes()...)
PutBuffer(w)
return b
}
func (w *Writer) Write(b []byte) {

View File

@ -10,8 +10,8 @@ import (
)
func NewWriterFOld(f func(writer *Writer)) []byte {
w := (*Writer)(new(bytes.Buffer))
f(w)
w := new(bytes.Buffer)
f((*Writer)(w))
return w.Bytes()
}
@ -53,8 +53,8 @@ func TestNewWriterF(t *testing.T) {
wg.Wait()
}
func BenchmarkNewWriterFOld256(b *testing.B) {
test := make([]byte, 256)
func BenchmarkNewWriterFOld128(b *testing.B) {
test := make([]byte, 128)
rand.Read(test)
b.StartTimer()
b.RunParallel(func(pb *testing.PB) {
@ -66,8 +66,8 @@ func BenchmarkNewWriterFOld256(b *testing.B) {
})
}
func BenchmarkNewWriterF256(b *testing.B) {
test := make([]byte, 256)
func BenchmarkNewWriterF128(b *testing.B) {
test := make([]byte, 128)
rand.Read(test)
b.StartTimer()
b.RunParallel(func(pb *testing.PB) {
@ -79,27 +79,31 @@ func BenchmarkNewWriterF256(b *testing.B) {
})
}
func BenchmarkNewWriterFOld1024(b *testing.B) {
test := make([]byte, 1024)
func BenchmarkNewWriterFOld128_3(b *testing.B) {
test := make([]byte, 128)
rand.Read(test)
b.StartTimer()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
NewWriterFOld(func(w *Writer) {
w.Write(test)
w.Write(test)
w.Write(test)
})
}
})
}
func BenchmarkNewWriterF1024(b *testing.B) {
test := make([]byte, 1024)
func BenchmarkNewWriterF128_3(b *testing.B) {
test := make([]byte, 128)
rand.Read(test)
b.StartTimer()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
NewWriterF(func(w *Writer) {
w.Write(test)
w.Write(test)
w.Write(test)
})
}
})