【架构优化】list设置容量,避免动态扩容

This commit is contained in:
hahwu 2026-02-05 16:27:34 +08:00
parent 46a76843a9
commit 8345076c28
10 changed files with 20 additions and 280 deletions

View File

@ -607,7 +607,7 @@ func GetOrderItemList() []int {
log.Debug("GetOrderItemList err:%v", err)
return nil
}
r := make([]int, 0)
r := make([]int, 0, len(data))
for k := range data {
Id := GoUtil.Int(k)
if Id == 0 {
@ -665,7 +665,7 @@ func GetDailyTaskListById(Id int) []int {
return nil
}
Type := GetDailyTaskType(Id)
r := make([]int, 0)
r := make([]int, 0, len(data))
for k, v := range data {
if gamedata.GetIntValue(v, "Type") == Type {
r = append(r, GoUtil.Int(k))

View File

@ -151,61 +151,6 @@ func SeriesTransaction(sqlstrs []string, params [][]any) (err error) {
return
}
// 更新数据
func FormatUpdateOneAttrRow(u interface{}, tableName string, UpdateAttr string, Exclude string) (err error) {
t := reflect.TypeOf(u)
len1 := t.Elem().NumField()
Fields := make([]string, len1)
Values := make([]interface{}, len1)
pp := reflect.ValueOf(u)
origin := "UPDATE " + tableName + " SET "
index := 0
var keyValue interface{}
for i := 0; i < len1; i++ {
field := t.Elem().Field(i)
if field.Tag.Get("db") != Exclude {
if field.Tag.Get("db") == UpdateAttr {
Fields[index] = field.Tag.Get("db") + " = ?"
ufield := pp.Elem().FieldByName(field.Name)
k := ufield.Kind()
if k == reflect.String {
Values[index] = ufield.String()
}
if k == reflect.Int32 {
Values[index] = ufield.Int()
}
index++
}
} else {
ufield := pp.Elem().FieldByName(field.Name)
k := ufield.Kind()
if k == reflect.String {
keyValue = ufield.String()
}
if k == reflect.Int32 {
keyValue = ufield.Int()
}
}
}
Values[index] = keyValue
// Values = append(Values, keyValue)
origin += strings.Join(Fields, ",")
strLen := len(origin)
origin = origin[:strLen-1]
origin = origin + " WHERE " + Exclude + " = ?"
sqlStr := origin
_, err = SqlDb.Exec(sqlStr, Values...)
if err != nil {
log.Debug("table: %s, sql :%s, exec failed, err:%v\n", tableName, sqlStr, err)
return
}
return
}
// "UPDATE user SET age = ?, degree = ? WHERE id = ?"
func FormatAllMemUpdateDb(u interface{}, tableName string, Exclude string) (err error) {
t := reflect.TypeOf(u)
@ -381,52 +326,6 @@ func UpdateAccountInfoDeviceToDb(account *Db_Account) (err error) {
return
}
func FormatAllMemLoadDb(u interface{}, tableName string, Exclude string) (err error) {
t := reflect.TypeOf(u)
len := t.Elem().NumField()
Fields := make([]string, len)
Values := make([]interface{}, len)
pp := reflect.ValueOf(u)
origin := "SELECT * FROM " + tableName + " WHERE "
index := 0
var keyValue interface{}
for i := 0; i < len; i++ {
field := t.Elem().Field(i)
if field.Tag.Get("db") != Exclude {
Fields[index] = field.Tag.Get("db") + " = ?"
ufield := pp.Elem().FieldByName(field.Name)
k := ufield.Kind()
if k == reflect.String {
Values[index] = ufield.String()
}
if k == reflect.Int32 || k == reflect.Int || k == reflect.Int64 {
Values[index] = ufield.Int()
}
index++
} else {
ufield := pp.Elem().FieldByName(field.Name)
k := ufield.Kind()
if k == reflect.String {
keyValue = ufield.String()
}
if k == reflect.Int32 {
keyValue = ufield.Int()
}
}
}
Values[index] = keyValue
// Values = append(Values, keyValue)
origin += strings.Join(Fields, " AND ")
sqlStr := origin
if err := SqlDb.Get(u, sqlStr, Values...); err != nil {
log.Debug("table: %s, sql :%s, exec failed, err:%v\n", tableName, sqlStr, err)
return err
}
return
}
func GetServerData(d interface{}, Key string) (err error) {
sqlDb := GetDB()
if sqlDb == nil {
@ -487,103 +386,6 @@ func GetPlayerClientData(d interface{}, Key string) (err error) {
return
}
func InsertData(u interface{}, tableName string) (insertID int64, err error) {
t := reflect.TypeOf(u)
len := t.Elem().NumField()
Fields := make([]string, 0)
Fields1 := make([]string, 0)
Values := make([]interface{}, 0)
pp := reflect.ValueOf(u)
origin := "INSERT INTO " + tableName + "("
for i := 0; i < len; i++ {
field := t.Elem().Field(i)
if field.Tag.Get("db") == "id" {
continue
}
ufield := pp.Elem().FieldByName(field.Name)
k := ufield.Kind()
if k == reflect.String && ufield.String() == "" {
continue
}
if (k == reflect.Int32 || k == reflect.Int || k == reflect.Int64) && ufield.Int() == 0 {
continue
}
if k == reflect.String {
Values = append(Values, ufield.String())
}
if k == reflect.Int32 || k == reflect.Int || k == reflect.Int64 {
Values = append(Values, ufield.Int())
}
Fields = append(Fields, field.Tag.Get("db"))
Fields1 = append(Fields1, "?")
}
for i := range Fields {
Fields[i] = "`" + Fields[i] + "`"
}
origin += strings.Join(Fields, ",")
origin += ") VALUES("
origin += strings.Join(Fields1, ",")
origin += ")"
sqlStr := origin
result, err := SqlDb.Exec(sqlStr, Values...)
if err != nil {
log.Debug("InsertData exec failed, sql : %s ;err:%v\n", sqlStr, err)
return
}
insertID, err = result.LastInsertId()
if err != nil {
log.Debug("InsertData exec failed, err:%v\n", err)
return
}
return
}
func UpdateData(u interface{}, tableName string, Exclude string) (err error) {
t := reflect.TypeOf(u)
len1 := t.Elem().NumField()
Fields := make([]string, 0)
Values := make([]interface{}, 0)
pp := reflect.ValueOf(u)
origin := "UPDATE " + tableName + " SET "
var ExcludeValue interface{}
for i := 0; i < len1; i++ {
field := t.Elem().Field(i)
ufield := pp.Elem().FieldByName(field.Name)
k := ufield.Kind()
if field.Tag.Get("db") != Exclude && field.Tag.Get("db") != "id" {
if k == reflect.String {
Values = append(Values, ufield.String())
}
if k == reflect.Int32 || k == reflect.Int || k == reflect.Int64 {
Values = append(Values, ufield.Int())
}
Fields = append(Fields, "`"+field.Tag.Get("db")+"` = ?")
}
if field.Tag.Get("db") == Exclude {
if k == reflect.String {
ExcludeValue = ufield.String()
}
if k == reflect.Int32 || k == reflect.Int || k == reflect.Int64 {
ExcludeValue = append(Values, ufield.Int())
}
}
}
Values = append(Values, ExcludeValue)
origin += strings.Join(Fields, ",")
origin = origin + " WHERE `" + Exclude + "` = ?"
sqlStr := origin
_, err = SqlDb.Exec(sqlStr, Values...)
if err != nil {
log.Debug("update failed, sql %s err:%v\n", sqlStr, err)
return
}
return
}
func GetServerMailData(data *[]*SqlServerMailStruct) error {
sql := "select * from system_mail_info"
err := SqlDb.Select(data, sql)

View File

@ -472,7 +472,6 @@ func G_getGameLogic() *GameLogic {
G_GameLogicPtr.RegisterEvent() // 注册事件
G_GameLogicPtr.RegisterNetWorkFunc() // 注册客户端接口
G_GameLogicPtr.InitActivity() // 初始化活动
G_GameLogicPtr.GetVersion() // 获取版本号
if conf.Server.ServerType == "center" {
G_GameLogicPtr.CreateFriendMgr() //创建好友管理器
G_GameLogicPtr.CreateChampshipMgr() // 创建竞标赛管理器
@ -501,28 +500,6 @@ func (ad *GameLogic) InitServerInfo() {
ad.SeverInfo = ServerInfo
}
func (ad *GameLogic) GetVersion() {
sqlStr := "SELECT * FROM t_gameserver WHERE id = ?"
sqlStruck := db.SqlVersionStruct{}
IsHaveDataDb := false
sqlStruck.Id = 1
G_GameLogicPtr.Version = 0
if err := db.SqlDb.Get(&sqlStruck, sqlStr, 1); err != nil {
G_GameLogicPtr.Version = 1
IsHaveDataDb = false
} else {
G_GameLogicPtr.Version = sqlStruck.IsClose + 1
IsHaveDataDb = true
}
sqlStruck.IsClose = G_GameLogicPtr.Version
if IsHaveDataDb {
db.FormatAllMemUpdateDb(&sqlStruck, "t_gameserver", "id")
} else {
db.FormatAllMemInsertDb(&sqlStruck, "t_gameserver")
}
}
func (ad *GameLogic) SendServerVersion(a gate.Agent) {
res := &msg.ResServerVersion{}
res.Version = G_GameLogicPtr.Version

View File

@ -221,7 +221,7 @@ func (p *Player) GuessColorBackData() {
Status := p.GetActivityStatus(activity.ACT_TYPE_GUESS_COLOR)
GuessColorMod := p.PlayMod.getGuessColorMod()
MapList := make([]*msg.GuessColorInfo, 0)
MapList := make([]*msg.GuessColorInfo, 0, len(GuessColorMod.MapList))
for _, v := range GuessColorMod.MapList {
MapList = append(MapList, &msg.GuessColorInfo{
Map: v,
@ -252,7 +252,7 @@ func (p *Player) RaceBackData() {
}
Status := p.GetActivityStatus(activity.ACT_TYPE_RACE)
RaceMod := p.PlayMod.getRaceMod()
Opponent := make([]*msg.Raceopponent, 0)
Opponent := make([]*msg.Raceopponent, 0, len(RaceMod.Opponent))
for _, v := range RaceMod.Opponent {
Opponent = append(Opponent, &msg.Raceopponent{
Id: int32(v.Id),
@ -352,7 +352,7 @@ func (p *Player) CatnipBackData() {
return
}
FriendMod := p.PlayMod.getFriendMod()
GameList := make([]*msg.CatnipGame, 0)
GameList := make([]*msg.CatnipGame, 0, len(CatnipMod.Game))
for _, v := range CatnipMod.Game {
GameInfo := &msg.CatnipGame{
Id: int32(v.Id),
@ -373,7 +373,6 @@ func (p *Player) CatnipBackData() {
GameList = append(GameList, GameInfo)
}
tmpData := make(map[int]*msg.CatnipInvite)
InviteList := make([]*msg.CatnipInvite, 0)
for uid, info := range CatnipMod.InviteList {
tmpData[uid] = &msg.CatnipInvite{
Uid: int64(uid),
@ -410,6 +409,7 @@ func (p *Player) CatnipBackData() {
invite.Type = 4 // 已参与游戏的好友不显示邀请
}
}
InviteList := make([]*msg.CatnipInvite, 0, len(tmpData))
for _, v := range tmpData {
ResPlayerSimple := G_getGameLogic().GetResSimplePlayerByUid(int(v.Uid))
if ResPlayerSimple != nil {

View File

@ -1099,7 +1099,7 @@ func (player *Player) GetPetOrderReward(Star int, Items []*item.Item) []*item.It
}
func ExcludeCardStar(CardList []int) []int {
StarList := make([]int, 0)
StarList := make([]int, 0, len(CardList))
for _, v := range CardList {
Star := cardCfg.GetStarById(v)
if Star < 2 || Star > 4 {

View File

@ -224,7 +224,7 @@ func (c *CardMod) BackData() *msg.ResCardInfo {
}
cardList = append(cardList, &msg.Card{Id: int32(k), Count: int32(v)})
}
ReqUid := make([]int64, 0)
ReqUid := make([]int64, 0, len(c.ReqFriend))
for _, v := range c.ReqFriend {
if v.EndTime < GoUtil.Now() {
delete(c.ReqFriend, v.BUid)
@ -232,7 +232,7 @@ func (c *CardMod) BackData() *msg.ResCardInfo {
}
ReqUid = append(ReqUid, int64(v.BUid))
}
ExUid := make([]int64, 0)
ExUid := make([]int64, 0, len(c.ExCard))
for k, v := range c.ExCard {
if v.EndTime < GoUtil.Now() {
delete(c.ExCard, k)
@ -514,7 +514,7 @@ func (c *CardMod) NotifyCard() *msg.ResNotifyCard {
}
func (c *CardMod) NotifyTimes() *msg.ResNotifyCardTimes {
ReqUid := make([]int64, 0)
ReqUid := make([]int64, 0, len(c.ReqFriend))
for k, v := range c.ReqFriend {
if v.EndTime < GoUtil.Now() {
delete(c.ReqFriend, k)
@ -522,7 +522,7 @@ func (c *CardMod) NotifyTimes() *msg.ResNotifyCardTimes {
}
ReqUid = append(ReqUid, int64(k))
}
ExUid := make([]int64, 0)
ExUid := make([]int64, 0, len(c.ExCard))
for k, v := range c.ExCard {
if v.EndTime < GoUtil.Now() {
delete(c.ExCard, k)
@ -590,7 +590,7 @@ func (c *CardMod) SeasonFirstReward() ([]*item.Item, error) {
}
func (c *CardMod) GetCardList() []int {
cardList := make([]int, 0)
cardList := make([]int, 0, len(c.CardList))
for k, v := range c.CardList {
if v > 0 {
cardList = append(cardList, k)

View File

@ -20,42 +20,3 @@ func GetChessDiamond(Lv, Type int) int {
}
return max(1, d)
}
// func getChessMainRand(Color string) []*Rand {
// r := make([]*Rand, 0)
// for i := 6; i <= 10; i++ {
// Diamond := int(math.Pow(2, float64(i-1)) / 2.5)
// ChessId := mergeDataCfg.GetChessIdByLvAndColor(i, Color)
// if ChessId == 0 {
// continue
// }
// r = append(r, &Rand{ChessId: ChessId, Diamond: Diamond})
// }
// return r
// }
// func getChessSecondaryRand(Color string) []*Rand {
// r := make([]*Rand, 0)
// for i := 5; i <= 9; i++ {
// Diamond := int((math.Pow(2, float64(i-1)) / 2.5) * 2)
// ChessId := mergeDataCfg.GetChessIdByLvAndColor(i, Color)
// if ChessId == 0 {
// continue
// }
// r = append(r, &Rand{ChessId: ChessId, Diamond: Diamond})
// }
// return r
// }
// func getChessSubRand(Color string) []*Rand {
// r := make([]*Rand, 0)
// for i := 5; i <= 9; i++ {
// Diamond := int(math.Pow(2, float64(i-1))/2.5 + 6.4)
// ChessId := mergeDataCfg.GetChessIdByLvAndColor(i, Color)
// if ChessId == 0 {
// continue
// }
// r = append(r, &Rand{ChessId: ChessId, Diamond: Diamond})
// }
// return r
// }

View File

@ -149,7 +149,7 @@ func (cb *ChessBorad) ComposeChess(id int) (int, error) {
return 0, errors.New("已达最大等级")
}
count := 0
newList := make([]int, 0)
newList := make([]int, 0, len(cb.ChessList))
for _, chess := range cb.ChessList {
if chess == id && count < 2 {
count++
@ -457,17 +457,17 @@ func (cb *ChessBorad) BackData() *msg.ResPlayerChessInfo {
Count: int32(v.Num),
})
}
Re := make([]string, 0)
Re := make([]string, 0, len(cb.Retire))
for k, v := range cb.Retire {
if v == EMIT_RETIRE_END {
Re = append(Re, k)
}
}
Ho := make([]int32, 0)
Ho := make([]int32, 0, len(cb.Honor))
for k := range cb.Honor {
Ho = append(Ho, int32(k))
}
Rw := make([]string, 0)
Rw := make([]string, 0, len(cb.RetireReward))
for k, v := range cb.RetireReward {
if v == true {
Rw = append(Rw, k)
@ -633,7 +633,7 @@ func (cb *ChessBorad) RetireOrder(EmitType string) error {
if cb.Retire[EmitType] != 1 {
return errors.New("chess has not been retired")
}
chess := make([]int, 0)
chess := make([]int, 0, len(cb.ChessMap))
EmitProduct := mergeDataCfg.GetEmitOrderProduce(EmitType)
for k, v := range cb.ChessMap {
arr := strings.Split(k, "@")

View File

@ -30,7 +30,7 @@ const (
func (player *Player) MailTrigger(Tr *quest.Trigger) bool {
MailMod := player.PlayMod.getMailMod()
TriggerMail := mailCfg.GetTriggerMail()
t := make([]*mailCfg.TriggerMail, 0)
t := make([]*mailCfg.TriggerMail, 0, len(TriggerMail))
for _, v := range TriggerMail {
if GoUtil.InArray(v.Id, MailMod.TriggerMail) {
continue

View File

@ -26,9 +26,9 @@ func main() {
lconf.ListenAddr = conf.Server.ListenAddr
lconf.CenterAddr = conf.Server.CenterAddr
lconf.PendingWriteNum = conf.PendingWriteNum
// 当内存>2G时开始GC
// 当内存>256M时开始GC
debug.SetGCPercent(50)
debug.SetMemoryLimit(2 << 30)
debug.SetMemoryLimit(512 << 20)
// 启动 pprof仅绑定本地
go func() {
// 如果需要绑定所有接口改为 ":6060"