diff --git a/deb/reflist.go b/deb/reflist.go index 8a795da5..25cb0b6e 100644 --- a/deb/reflist.go +++ b/deb/reflist.go @@ -71,7 +71,9 @@ func (l *PackageRefList) Encode() []byte { // Decode decodes msgpack representation into PackageRefLit func (l *PackageRefList) Decode(input []byte) error { - decoder := codec.NewDecoderBytes(input, &codec.MsgpackHandle{}) + handle := &codec.MsgpackHandle{} + handle.ZeroCopy = true + decoder := codec.NewDecoderBytes(input, handle) return decoder.Decode(l) } diff --git a/deb/reflist_bench_test.go b/deb/reflist_bench_test.go index 367f3d09..b377574c 100644 --- a/deb/reflist_bench_test.go +++ b/deb/reflist_bench_test.go @@ -28,3 +28,20 @@ func BenchmarkReflistSimpleMerge(b *testing.B) { l.Merge(r, false, true) } } + +func BenchmarkReflistDecode(b *testing.B) { + const count = 4096 + + r := NewPackageRefList() + for i := 0; i < count; i++ { + r.Refs = append(r.Refs, []byte(fmt.Sprintf("Pamd64 pkg%d %d", i, i))) + } + + sort.Sort(r) + data := r.Encode() + + b.ResetTimer() + for i := 0; i < b.N; i++ { + (&PackageRefList{}).Decode(data) + } +}