备份优化

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