You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit eliminates all allocations during marshalling (except for
the final []byte slice allocation, which is unavoidable). This matches
the behavior of encoding/json. It also prevents the vwPool from leaking
writers and includes a few small optimizations to the value_writer.
Other Changes:
* bsoncodec: reduce use of reflect.Value.Interface()
* bson: use a buffer pool instead of SliceWriter to eliminate 2 allocs
* bsonrw: use references to slice indexes
This work builds off of #1313
and uses the BenchmarkCode* suite added by that PR.
The combined performance improvement is below:
```
goos: darwin
goarch: arm64
pkg: go.mongodb.org/mongo-driver/bson
│ base.20.txt │ new.20.txt │
│ sec/op │ sec/op vs base │
CodeUnmarshal/BSON-10 3.177m ± 1% 2.202m ± 1% -30.68% (p=0.000 n=20)
CodeMarshal/BSON-10 2922.7µ ± 0% 757.1µ ± 2% -74.10% (p=0.000 n=20)
geomean 3.047m 1.291m -57.63%
│ base.20.txt │ new.20.txt │
│ B/s │ B/s vs base │
CodeUnmarshal/BSON-10 582.5Mi ± 1% 840.4Mi ± 1% +44.26% (p=0.000 n=20)
CodeMarshal/BSON-10 633.2Mi ± 0% 2444.3Mi ± 2% +286.03% (p=0.000 n=20)
geomean 607.3Mi 1.400Gi +135.99%
│ base.20.txt │ new.20.txt │
│ B/op │ B/op vs base │
CodeUnmarshal/BSON-10 4.219Mi ± 0% 4.148Mi ± 0% -1.69% (p=0.000 n=20)
CodeMarshal/BSON-10 2.818Mi ± 3% 1.630Mi ± 0% -42.16% (p=0.000 n=20)
geomean 3.448Mi 2.600Mi -24.59%
│ base.20.txt │ new.20.txt │
│ allocs/op │ allocs/op vs base │
CodeUnmarshal/BSON-10 230.4k ± 0% 220.7k ± 0% -4.21% (p=0.000 n=20)
CodeMarshal/BSON-10 94066.000 ± 0% 1.000 ± 0% -100.00% (p=0.000 n=20)
geomean 147.2k 469.7 -99.68%
```
0 commit comments