mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-05 17:40:26 +08:00
优化代码
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
33
internal/utils/testutils/memory.go
Normal file
33
internal/utils/testutils/memory.go
Normal 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")
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user