From eccf79fa28c5bcf78bf2ea9fa3c5d90299269e39 Mon Sep 17 00:00:00 2001 From: Emmanuel Ortiz Date: Tue, 30 Jul 2024 12:13:48 -0600 Subject: [PATCH] add buffer pool to encoder for improved performance --- internal/encoding/tl/encoder.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/internal/encoding/tl/encoder.go b/internal/encoding/tl/encoder.go index 9e101588..31b7e8a3 100755 --- a/internal/encoding/tl/encoder.go +++ b/internal/encoding/tl/encoder.go @@ -6,19 +6,29 @@ import ( "bytes" "fmt" "reflect" + "sync" "github.com/pkg/errors" ) +var bufferPool = sync.Pool{ + New: func() any { + return bytes.NewBuffer(make([]byte, 8*1024)) // 8kb + }, +} + func Marshal(v any) ([]byte, error) { - buf := bytes.NewBuffer(nil) + buf := bufferPool.Get().(*bytes.Buffer) + defer bufferPool.Put(buf) + buf.Reset() + encoder := NewEncoder(buf) encoder.encodeValue(reflect.ValueOf(v)) if err := encoder.CheckErr(); err != nil { return nil, err } - return buf.Bytes(), nil + return bytes.Clone(buf.Bytes()), nil } func (c *Encoder) encodeValue(value reflect.Value) {