]> Cypherpunks repositories - gostls13.git/commit
encoding/binary: cache struct sizes to speed up Read and Write
authorLorenz Bauer <lmb@cloudflare.com>
Fri, 1 Nov 2019 10:39:35 +0000 (10:39 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Fri, 1 Nov 2019 20:16:01 +0000 (20:16 +0000)
commitc9d89f6bacd66d4765cf36d2a4b121392921c5ed
tree6e723a23baae629865abef59091697fbb0740368
parent2c8529cb4d474ab1c7993d3a5af27d9c5e748e0b
encoding/binary: cache struct sizes to speed up Read and Write

A majority of work is spent in dataSize when en/decoding the same
struct over and over again. This wastes a lot of work, since
the result doesn't change for a given reflect.Value.

Cache the result of the function for structs, so that subsequent
calls to dataSize can avoid doing work.

    name         old time/op    new time/op     delta
    ReadStruct     1.00µs ± 1%     0.37µs ± 1%   -62.99%  (p=0.029 n=4+4)
    WriteStruct    1.00µs ± 3%     0.37µs ± 1%   -62.69%  (p=0.008 n=5+5)

    name         old speed      new speed       delta
    ReadStruct   75.1MB/s ± 1%  202.9MB/s ± 1%  +170.16%  (p=0.029 n=4+4)
    WriteStruct  74.8MB/s ± 3%  200.4MB/s ± 1%  +167.96%  (p=0.008 n=5+5)

Fixes #34471

Change-Id: Ic5d987ca95f1197415ef93643a0af6fc1224fdf0
Reviewed-on: https://go-review.googlesource.com/c/go/+/199539
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
src/encoding/binary/binary.go
src/encoding/binary/binary_test.go