备份的序列化对象使用内存池

This commit is contained in:
hahwu 2026-03-23 11:39:36 +08:00
parent e0b255a859
commit d190c2edf8

View File

@ -82,6 +82,17 @@ type PlayerMsg struct {
B []byte
}
var playerDataPool = sync.Pool{
New: func() interface{} {
return &PlayerBackUp{}
},
}
func (pd *PlayerBackUp) Reset() {
pd.Data = msg.ResPlayerBaseInfo{}
pd.PlayMod = nil
}
func (p *Player) Stop() {
p.wg.Wait()
p.signalDispatcherStop()
@ -201,10 +212,10 @@ func (p *Player) ProcessTrigger() {
// 接口请求之前备份数据
func (p *Player) BackUp() *PlayerBackUp {
BackUp := PlayerBackUp{}
p.PlayMod.BackUp(&BackUp)
BackUp := playerDataPool.Get().(*PlayerBackUp)
p.PlayMod.BackUp(BackUp)
BackUp.Data = p.GetPlayerBaseMod().BackUp()
return &BackUp
return BackUp
}
// 接口发生错误时 还原数据
@ -212,6 +223,8 @@ func (p *Player) Recover(backUp *PlayerBackUp) {
// p.GetPlayerBaseMod().Data = backUp.Data
p.PlayMod.Recover(backUp)
p.Msg = make([]PlayerMsg, 0)
backUp.Reset()
playerDataPool.Put(backUp)
}
func (p *Player) InitPlayer(UserName string) error {