From f814d6c0f1bf08084363d417a9ec914d3a91a727 Mon Sep 17 00:00:00 2001 From: Aaron Beitch Date: Tue, 3 Dec 2019 11:50:15 -0800 Subject: [PATCH] Reduce allocations in sortKeysMapEncoder Use one buffer for all values. --- reflect_map.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reflect_map.go b/reflect_map.go index 08e9a39..d1367a3 100644 --- a/reflect_map.go +++ b/reflect_map.go @@ -293,13 +293,13 @@ func (encoder *sortKeysMapEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { subIter := stream.cfg.BorrowIterator(nil) keyValues := encodedKeyValues{} for mapIter.HasNext() { - subStream.buf = make([]byte, 0, 64) key, elem := mapIter.UnsafeNext() + subStreamIndex := subStream.Buffered() encoder.keyEncoder.Encode(key, subStream) if subStream.Error != nil && subStream.Error != io.EOF && stream.Error == nil { stream.Error = subStream.Error } - encodedKey := subStream.Buffer() + encodedKey := subStream.Buffer()[subStreamIndex:] subIter.ResetBytes(encodedKey) decodedKey := subIter.ReadString() if stream.indention > 0 { @@ -310,7 +310,7 @@ func (encoder *sortKeysMapEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { encoder.elemEncoder.Encode(elem, subStream) keyValues = append(keyValues, encodedKV{ key: decodedKey, - keyValue: subStream.Buffer(), + keyValue: subStream.Buffer()[subStreamIndex:], }) } sort.Sort(keyValues)