【架构优化】list设置容量,避免动态扩容
This commit is contained in:
parent
46a76843a9
commit
8345076c28
@ -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))
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
// }
|
||||
|
||||
@ -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, "@")
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user