mirror of
https://github.com/golang/go
synced 2024-11-17 17:04:47 -07:00
encoding/asn1: speed up marshal by reducing allocations
Replace strings.Split by strings.IndexByte and explicit slicing to avoid the allocation of the return slice of strings.Split. name old time/op new time/op delta Marshal 43.3µs ± 1% 36.7µs ± 1% -15.23% (p=0.000 n=9+9) name old alloc/op new alloc/op delta Marshal 10.7kB ± 0% 9.2kB ± 0% -13.96% (p=0.000 n=10+10) name old allocs/op new allocs/op delta Marshal 444 ± 0% 366 ± 0% -17.57% (p=0.000 n=10+10) Change-Id: I9e727defa23f7e5fc684f246de0136fe28cf8d25 Reviewed-on: https://go-review.googlesource.com/c/go/+/231738 TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
cdc77d34d7
commit
861a948335
@ -92,7 +92,16 @@ type fieldParameters struct {
|
||||
// parseFieldParameters will parse it into a fieldParameters structure,
|
||||
// ignoring unknown parts of the string.
|
||||
func parseFieldParameters(str string) (ret fieldParameters) {
|
||||
for _, part := range strings.Split(str, ",") {
|
||||
var part string
|
||||
for len(str) > 0 {
|
||||
// This loop uses IndexByte and explicit slicing
|
||||
// instead of strings.Split(str, ",") to reduce allocations.
|
||||
i := strings.IndexByte(str, ',')
|
||||
if i < 0 {
|
||||
part, str = str, ""
|
||||
} else {
|
||||
part, str = str[:i], str[i+1:]
|
||||
}
|
||||
switch {
|
||||
case part == "optional":
|
||||
ret.optional = true
|
||||
|
Loading…
Reference in New Issue
Block a user