优化代码

This commit is contained in:
GoEdgeLab
2022-03-12 18:00:22 +08:00
parent a7d530eb5a
commit 87b51dbd21
3 changed files with 51 additions and 9 deletions

View File

@@ -1,6 +1,7 @@
package ttlcache package ttlcache
import ( import (
"github.com/TeaOSLab/EdgeNode/internal/utils/testutils"
"github.com/iwind/TeaGo/rands" "github.com/iwind/TeaGo/rands"
"runtime" "runtime"
"strconv" "strconv"
@@ -29,19 +30,26 @@ func TestNewCache(t *testing.T) {
} }
func TestCache_Memory(t *testing.T) { func TestCache_Memory(t *testing.T) {
var stat1 = &runtime.MemStats{} testutils.StartMemoryStats(t)
runtime.ReadMemStats(stat1)
cache := NewCache() var cache = NewCache()
for i := 0; i < 10_000_000; i++ { var count = 2_000_000
for i := 0; i < count; i++ {
cache.Write("a"+strconv.Itoa(i), 1, time.Now().Unix()+3600) cache.Write("a"+strconv.Itoa(i), 1, time.Now().Unix()+3600)
} }
t.Log("waiting ...")
var stat2 = &runtime.MemStats{} t.Log(cache.Count())
runtime.ReadMemStats(stat2)
t.Log((stat2.HeapInuse-stat1.HeapInuse)/1024/1024, "MB") time.Sleep(1 * time.Second)
for i := 0; i < count; i++ {
if i%2 == 0 {
cache.Delete("a" + strconv.Itoa(i))
}
}
t.Log(cache.Count())
cache.Count()
} }
func BenchmarkCache_Add(b *testing.B) { func BenchmarkCache_Add(b *testing.B) {

View File

@@ -10,7 +10,8 @@ import (
type Piece struct { type Piece struct {
m map[uint64]*Item m map[uint64]*Item
maxItems int maxItems int
locker sync.RWMutex
locker sync.RWMutex
} }
func NewPiece(maxItems int) *Piece { func NewPiece(maxItems int) *Piece {

View File

@@ -0,0 +1,33 @@
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
package testutils
import (
"fmt"
timeutil "github.com/iwind/TeaGo/utils/time"
"runtime"
"testing"
"time"
)
func StartMemoryStats(t *testing.T) {
var ticker = time.NewTicker(1 * time.Second)
go func() {
var stat = &runtime.MemStats{}
var lastHeapInUse uint64
for range ticker.C {
runtime.ReadMemStats(stat)
if stat.HeapInuse == lastHeapInUse {
return
}
lastHeapInUse = stat.HeapInuse
var before = time.Now()
runtime.GC()
var cost = time.Since(before).Seconds()
t.Log(timeutil.Format("H:i:s"), "HeapInuse:", fmt.Sprintf("%.2fM", float64(stat.HeapInuse)/1024/1024), "NumGC:", stat.NumGC, "Cost:", fmt.Sprintf("%.4f", cost*1000), "ms")
}
}()
}