dtm icon indicating copy to clipboard operation
dtm copied to clipboard

Optimize Map2Kvs functions by pre-allocating memory

Open me-cs opened this issue 1 year ago • 0 comments

goos: windows goarch: amd64 pkg: github.com/dtm-labs/dtm/client/dtmgrpc/dtmgimp cpu: Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz BenchmarkMap2Kvs BenchmarkMap2Kvs-16 61436 19822 ns/op BenchmarkMap2KvsOld BenchmarkMap2KvsOld-16 30886 38553 ns/op PASS

package dtmgimp

import (
	"math/rand"
	"testing"
)

const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

func RandStringBytes(n int) string {
	b := make([]byte, n)
	for i := range b {
		b[i] = letterBytes[rand.Intn(len(letterBytes))]
	}
	return string(b)
}

var m = func() map[string]string {
	m := make(map[string]string)
	for i := 0; i < 1000; i++ {
		m[RandStringBytes(100)] = "exist"
	}
	return m
}()

// Map2Kvs map to metadata kv
func Map2KvsNew(m map[string]string) []string {
	kvs := make([]string, 0, len(m)<<1)
	for k, v := range m {
		kvs = append(kvs, k, v)
	}
	return kvs
}

// Map2Kvs map to metadata kv
func Map2KvsOld(m map[string]string) []string {
	kvs := []string{}
	for k, v := range m {
		kvs = append(kvs, k, v)
	}
	return kvs
}

func BenchmarkMap2Kvs(b *testing.B) {
	for i := 0; i < b.N; i++ {
		_ = Map2KvsNew(m)
	}
}

func BenchmarkMap2KvsOld(b *testing.B) {
	for i := 0; i < b.N; i++ {
		_ = Map2KvsOld(m)
	}
}

me-cs avatar Sep 23 '24 08:09 me-cs