Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
The ProtoMethods is called for every unmarshal, which in turn allocates an protoiface.Methods. The Methods object does not refer to a partucular message object, so the allocation can be saved by one-time initialization at startup. Found by the the alecthomas/go_serialization_benchmarks suite: go test -bench='Pulsar' -memprofile mem.out -cpu 6 ./ Before: goos: darwin goarch: arm64 pkg: github.com/alecthomas/go_serialization_benchmarks Benchmark_Pulsar_Marshal-6 7480744 154.1 ns/op 51.57 B/serial 96 B/op 2 allocs/op Benchmark_Pulsar_Unmarshal-6 5057922 236.9 ns/op 51.60 B/serial 256 B/op 7 allocs/op After: Benchmark_Pulsar_Marshal-6 7251019 153.9 ns/op 51.57 B/serial 96 B/op 2 allocs/op Benchmark_Pulsar_Unmarshal-6 6409070 187.2 ns/op 51.63 B/serial 160 B/op 5 allocs/op
- Loading branch information