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:
parent
f3beaae4e4
commit
207df5fc00
@ -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) {
|
||||
|
@ -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)
|
||||
})
|
||||
}
|
||||
})
|
||||
|
Loading…
x
Reference in New Issue
Block a user