mirror of
https://github.com/vbatts/go-mtree.git
synced 2025-10-04 04:31:00 +00:00
By avoiding lots of small string allocations and reallocations when appending to the output buffer, we can get a pretty decent performance improvement (~6x for strings that do not require escaping, and ~2x for most other multi-byte utf8 strings). goos: linux goarch: amd64 pkg: github.com/vbatts/go-mtree/pkg/govis cpu: AMD Ryzen 7 7840U w/ Radeon 780M Graphics │ before │ after │ │ sec/op │ sec/op vs base │ Vis/NoChange-16 2372.5n ± 2% 379.1n ± 1% -84.02% (p=0.000 n=10) Vis/Binary-16 2.104µ ± 8% 1.319µ ± 8% -37.35% (p=0.000 n=10) Vis/ASCII-16 2070.0n ± 1% 737.3n ± 0% -64.38% (p=0.000 n=10) Vis/German-16 3.380µ ± 1% 1.181µ ± 2% -65.04% (p=0.000 n=10) Vis/Russian-16 10.927µ ± 2% 5.293µ ± 2% -51.56% (p=0.000 n=10) Vis/Japanese-16 7.489µ ± 1% 3.990µ ± 0% -46.72% (p=0.000 n=10) geomean 3.767µ 1.447µ -61.58% In theory we could get more performance if switch away from fmt.Sprintf, but the %.N handling would be a little annoying to implement and so we can punt on that for now. Signed-off-by: Aleksa Sarai <cyphar@cyphar.com> |
||
---|---|---|
.. | ||
govis |