diff --git a/binary/jce/writer.go b/binary/jce/writer.go index a9464e8a..702f1eb1 100644 --- a/binary/jce/writer.go +++ b/binary/jce/writer.go @@ -160,11 +160,11 @@ func (w *JceWriter) WriteMap(m interface{}, tag int) { return } w.writeHead(8, tag) - w.WriteInt32(int32(len(va.MapKeys())), 0) - for _, k := range va.MapKeys() { - v := va.MapIndex(k) - w.WriteObject(k.Interface(), 0) - w.WriteObject(v.Interface(), 1) + w.WriteInt32(int32(va.Len()), 0) + iter := va.MapRange() + for iter.Next() { + w.WriteObject(iter.Key().Interface(), 0) + w.WriteObject(iter.Value().Interface(), 1) } } diff --git a/binary/jce/writer_test.go b/binary/jce/writer_test.go new file mode 100644 index 00000000..bba1f1a8 --- /dev/null +++ b/binary/jce/writer_test.go @@ -0,0 +1,16 @@ +package jce + +import "testing" + +var globalBytes []byte + +func BenchmarkJceWriter_WriteMap(b *testing.B) { + var x = globalBytes + for i := 0; i < b.N; i++ { + w := NewJceWriter() + w.WriteMap(req.Map, 0) + x = w.Bytes() + } + globalBytes = x + b.SetBytes(int64(len(globalBytes))) +}