mirror of
https://github.com/golang/go
synced 2024-11-26 18:16:48 -07:00
encoding/asn1: improve memory efficiency of ObjectIdentifier.String
name old time/op new time/op delta
ObjectIdentifierString-4 670ns ± 9% 157ns ±14% -76.59% (p=0.000 n=10+9)
name old alloc/op new alloc/op delta
ObjectIdentifierString-4 184B ± 0% 32B ± 0% -82.61% (p=0.000 n=10+10)
name old allocs/op new allocs/op delta
ObjectIdentifierString-4 14.0 ± 0% 1.0 ± 0% -92.86% (p=0.000 n=10+10)
This also improves the x509 certificate parser performance by ~12-15%
name old time/op new time/op delta
ParseCertificate/ecdsa_leaf-4 24.5µs ± 8% 20.9µs ±11% -14.66% (p=0.000 n=10+10)
ParseCertificate/rsa_leaf-4 26.6µs ± 5% 23.5µs ± 7% -11.83% (p=0.000 n=8+10)
name old alloc/op new alloc/op delta
ParseCertificate/ecdsa_leaf-4 12.5kB ± 0% 12.0kB ± 0% -3.72% (p=0.000 n=10+10)
ParseCertificate/rsa_leaf-4 13.9kB ± 0% 13.4kB ± 0% -3.34% (p=0.000 n=10+10)
name old allocs/op new allocs/op delta
ParseCertificate/ecdsa_leaf-4 238 ± 0% 165 ± 0% -30.67% (p=0.000 n=10+10)
ParseCertificate/rsa_leaf-4 262 ± 0% 189 ± 0% -27.86% (p=0.000 n=10+10)
Change-Id: I49905bbf8319b840e9211da73570db35d1445217
GitHub-Last-Rev: 361d68dc9b
GitHub-Pull-Request: golang/go#59198
Reviewed-on: https://go-review.googlesource.com/c/go/+/478836
Reviewed-by: Roland Shoemaker <roland@golang.org>
Reviewed-by: Filippo Valsorda <filippo@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Run-TryBot: Mateusz Poliwczak <mpoliwczak34@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
parent
b441eb3f97
commit
c292397160
@ -26,6 +26,7 @@ import (
|
|||||||
"math/big"
|
"math/big"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
"unicode/utf16"
|
"unicode/utf16"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
@ -236,16 +237,18 @@ func (oi ObjectIdentifier) Equal(other ObjectIdentifier) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (oi ObjectIdentifier) String() string {
|
func (oi ObjectIdentifier) String() string {
|
||||||
var s string
|
var s strings.Builder
|
||||||
|
s.Grow(32)
|
||||||
|
|
||||||
|
buf := make([]byte, 0, 19)
|
||||||
for i, v := range oi {
|
for i, v := range oi {
|
||||||
if i > 0 {
|
if i > 0 {
|
||||||
s += "."
|
s.WriteByte('.')
|
||||||
}
|
}
|
||||||
s += strconv.Itoa(v)
|
s.Write(strconv.AppendInt(buf, int64(v), 10))
|
||||||
}
|
}
|
||||||
|
|
||||||
return s
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
// parseObjectIdentifier parses an OBJECT IDENTIFIER from the given bytes and
|
// parseObjectIdentifier parses an OBJECT IDENTIFIER from the given bytes and
|
||||||
|
@ -1168,3 +1168,10 @@ func TestNonMinimalEncodedOID(t *testing.T) {
|
|||||||
t.Fatalf("accepted non-minimally encoded oid")
|
t.Fatalf("accepted non-minimally encoded oid")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BenchmarkObjectIdentifierString(b *testing.B) {
|
||||||
|
oidPublicKeyRSA := ObjectIdentifier{1, 2, 840, 113549, 1, 1, 1}
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
_ = oidPublicKeyRSA.String()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user