perf: avoid unnecessary byteslice->string before fmt %s verb (#10364)
fmt.Printf or fmt.Sprintf already know how to convert a byteslice into a string when building the output; we shouldn't incur the unnecessary string(byteslice) conversion. Using Bencher, we can see improvements such as https://dashboard.github.orijtech.com/benchmark/3245b8e4bbbd44a597480319aaa4b9fe which in independent experiments show: * time/op (ns/op) FormatIt-8 1.2µs ± 2% 1.1µs ± 10% -11.77% (p=0.000 n=10+9) * speed (MB/s) FormatIt-8 0.71GB/s ± 2% 0.80GB/s ± 9% +13.59% (p=0.000 n=10+9) * allocs/op (B/op) FormatIt-8 2.0kB ± 0% 1.1kB ± 0% -45.62% (p=0.000 n=10+10) * allocs/op (count/op) FormatIt-8 11 ± 0% 9.0 ± 0% -18.18% (p=0.000 n=10+10) Fixes #10363
This commit is contained in:
@@ -88,7 +88,7 @@ func (s Subspace) transientStore(ctx sdk.Context) sdk.KVStore {
|
||||
func (s Subspace) Validate(ctx sdk.Context, key []byte, value interface{}) error {
|
||||
attr, ok := s.table.m[string(key)]
|
||||
if !ok {
|
||||
return fmt.Errorf("parameter %s not registered", string(key))
|
||||
return fmt.Errorf("parameter %s not registered", key)
|
||||
}
|
||||
|
||||
if err := attr.vfn(value); err != nil {
|
||||
@@ -167,7 +167,7 @@ func (s Subspace) Modified(ctx sdk.Context, key []byte) bool {
|
||||
func (s Subspace) checkType(key []byte, value interface{}) {
|
||||
attr, ok := s.table.m[string(key)]
|
||||
if !ok {
|
||||
panic(fmt.Sprintf("parameter %s not registered", string(key)))
|
||||
panic(fmt.Sprintf("parameter %s not registered", key))
|
||||
}
|
||||
|
||||
ty := attr.ty
|
||||
@@ -209,7 +209,7 @@ func (s Subspace) Set(ctx sdk.Context, key []byte, value interface{}) {
|
||||
func (s Subspace) Update(ctx sdk.Context, key, value []byte) error {
|
||||
attr, ok := s.table.m[string(key)]
|
||||
if !ok {
|
||||
panic(fmt.Sprintf("parameter %s not registered", string(key)))
|
||||
panic(fmt.Sprintf("parameter %s not registered", key))
|
||||
}
|
||||
|
||||
ty := attr.ty
|
||||
|
||||
Reference in New Issue
Block a user