mirror of
https://github.com/golang/go
synced 2024-11-20 11:14:45 -07:00
5f859ba83d
The current implementations of MarshalJSON and MarshalText use time.Format which returns a string (converted from a byte slice), only to convert it back to a byte slice. Avoid the conversion (and thus an allocation) by directly appending the formatted time to a preallocated byte slice, using the new AppendFormat function, introduced in golang.org/cl/1760. This reduces the allocations done in Marshal[Text|JSON] by 50%. benchmark old ns/op new ns/op delta BenchmarkMarshalJSON 626 507 -19.01% BenchmarkMarshalText 598 511 -14.55% benchmark old allocs new allocs delta BenchmarkMarshalJSON 2 1 -50.00% BenchmarkMarshalText 2 1 -50.00% benchmark old bytes new bytes delta BenchmarkMarshalJSON 96 48 -50.00% BenchmarkMarshalText 96 48 -50.00% Fixes #11025 Change-Id: I468f78d075a6ecc1cdc839df7fb407fbc6ff2e70 Reviewed-on: https://go-review.googlesource.com/10555 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> |
||
---|---|---|
.. | ||
example_test.go | ||
export_test.go | ||
export_windows_test.go | ||
format_test.go | ||
format.go | ||
genzabbrs.go | ||
internal_test.go | ||
sleep_test.go | ||
sleep.go | ||
sys_plan9.go | ||
sys_unix.go | ||
sys_windows.go | ||
tick_test.go | ||
tick.go | ||
time_test.go | ||
time.go | ||
zoneinfo_abbrs_windows.go | ||
zoneinfo_ios.go | ||
zoneinfo_plan9.go | ||
zoneinfo_read.go | ||
zoneinfo_test.go | ||
zoneinfo_unix.go | ||
zoneinfo_windows_test.go | ||
zoneinfo_windows.go | ||
zoneinfo.go |