reuse allocated buffer (#271)
* reuse buffer avoid allocate
* reuse buffer clean
* typo
* reuse buf size 512
diff --git a/encode.go b/encode.go
index b6d9aed..cd3e11a 100644
--- a/encode.go
+++ b/encode.go
@@ -21,9 +21,7 @@
"reflect"
"time"
"unsafe"
-)
-import (
perrors "github.com/pkg/errors"
)
@@ -56,6 +54,22 @@
e.refMap = make(map[unsafe.Pointer]_refElem, 7)
}
+// ReuseBufferClean reuse the Encoder for a new object encoding.
+// it reuse allocated buffer and reduce memory-allocation.
+func (e *Encoder) ReuseBufferClean() {
+ var buffer []byte
+ if cap(e.buffer) <= 512 {
+ // reuse buffer, avoid allocate
+ buffer = e.buffer[:0]
+ } else {
+ // avoiding memory leak caused by growth of underlying array
+ buffer = make([]byte, 64)
+ }
+ e.classInfoList = nil
+ e.buffer = buffer[:0]
+ e.refMap = make(map[unsafe.Pointer]_refElem, 7)
+}
+
// Buffer returns byte buffer
func (e *Encoder) Buffer() []byte {
return e.buffer[:]