备份优化

This commit is contained in:
hahwu 2026-02-03 15:10:27 +08:00
parent 123f4d2e1c
commit e26266f1d7

View File

@ -41,9 +41,17 @@ import (
sevenLogin "server/game/mod/seven_login"
Var "server/game/mod/var"
"server/pkg/github.com/name5566/leaf/log"
"sync"
"time"
)
// buffer 对象池,复用 bytes.Buffer 减少内存分配
var bufferPool = sync.Pool{
New: func() interface{} {
return bytes.NewBuffer(make([]byte, 0, 128*1024))
},
}
type PlayerData struct {
Name string
IsHaveDataDb bool
@ -262,17 +270,23 @@ func (p *PlayerMod) ClearData(player *Player) {
}
func (p *PlayerMod) BackUp(B *PlayerBackUp) {
// 预分配 buffer 容量,避免动态扩容,根据实际数据大小可调整
now := time.Now()
buf := bytes.NewBuffer(make([]byte, 0, 128*1024))
// 从对象池获取 buffer复用以减少内存分配
buf := bufferPool.Get().(*bytes.Buffer)
buf.Reset() // 清空之前的数据
encode := gob.NewEncoder(buf)
err := encode.Encode(p.mod_list)
if err != nil {
log.Debug("Backup, playmod error %v", err)
bufferPool.Put(buf) // 即使出错也要归还
return
}
B.PlayMod = buf.Bytes()
log.Debug("backup player, cost time %v", time.Since(now))
// 复制数据,因为 buf 会被放回池中
B.PlayMod = append([]byte(nil), buf.Bytes()...)
// 归还到对象池供下次使用
bufferPool.Put(buf)
}
func (p *PlayerMod) Recover(B *PlayerBackUp) {