内存优化

This commit is contained in:
lishuo 2024-02-01 16:49:22 +08:00
parent c3a9437fc8
commit 9f134a2d64
5 changed files with 88 additions and 126 deletions

View File

@ -76,66 +76,59 @@ namespace OnlineUserPool.Hander
return msgModels; return msgModels;
} }
if (mapRecordRankings != null) if (mapRecordRankings == null) return msgModels;
for (int i = 0; i < mapRecordRankings.Count; i++)
{ {
for (int i = 0; i < mapRecordRankings.Count; i++) try
{ {
try var item = mapRecordRankings[i];
item.CurrentIndex++;
var targetData = item.GetCurrentTargetData();
var weightKg = 0.0D;
if (targetData._Power >= 0)
{ {
var item = mapRecordRankings[i]; weightKg = Math.Round(targetData._Power / item.Weight, 2);
item.CurrentIndex++; }
TargetData targetData = item.GetCurrentTargetData();
var weightKg = 0.0D; if (item.CurrentIndex == 0)
if (targetData._Power >= 0) {
{ //机器人上线
weightKg = Math.Round(targetData._Power / item.Weight, 2); var loginInfo = new MsgModel()
}
if (item.CurrentIndex == 0)
{
//机器人上线
var loginInfo = new MsgModel()
{
Exit = item.End,
IsCompleted = item.End,
MemberId = item.UserId, //虚拟的人Id变为负数
Point = new double[] { -1d, -1d },
//Prop = string.Join(',', prop),
RouteId = item.RouteId,
EndDistance = Math.Round(targetData._Distance, 6),
//ShowVirtual = true,
CommandType = 1,
//IsVirtual = true,
Speed = targetData._Speed,
WeightKg = weightKg,
PreDistance = item.GetPreDistance()
};
msgModels.Add(loginInfo);
}
var info = new MsgModel()
{ {
Exit = item.End, Exit = item.End,
IsCompleted = item.End, IsCompleted = item.End,
MemberId = item.UserId, //虚拟的人Id变为负数 MemberId = item.UserId, //虚拟的人Id变为负数
Point = new double[] { Math.Round(targetData._Lat, 6), Math.Round(targetData._Lon, 6) }, Point = new double[] { -1d, -1d },
//Prop = string.Join(',', prop),
RouteId = item.RouteId, RouteId = item.RouteId,
EndDistance = Math.Round(targetData._Distance, 6), EndDistance = Math.Round(targetData._Distance, 6),
//ShowVirtual = true,
CommandType = 1, CommandType = 1,
//IsVirtual = true,
Speed = targetData._Speed, Speed = targetData._Speed,
WeightKg = weightKg, WeightKg = weightKg,
PreDistance = item.GetPreDistance() PreDistance = item.GetPreDistance()
}; };
msgModels.Add(info); msgModels.Add(loginInfo);
} }
catch (Exception e)
var info = new MsgModel()
{ {
Log.Error("加载虚拟人物错误:" + e.Message + "\r\n" + e.StackTrace); Exit = item.End,
} IsCompleted = item.End,
MemberId = item.UserId, //虚拟的人Id变为负数
Point = new double[] { Math.Round(targetData._Lat, 6), Math.Round(targetData._Lon, 6) },
RouteId = item.RouteId,
EndDistance = Math.Round(targetData._Distance, 6),
CommandType = 1,
Speed = targetData._Speed,
WeightKg = weightKg,
PreDistance = item.GetPreDistance()
};
msgModels.Add(info);
}
catch (Exception e)
{
Log.Error("加载虚拟人物错误:" + e.Message + "\r\n" + e.StackTrace);
} }
} }

View File

@ -45,26 +45,6 @@ namespace OnlineUserPool.Model
public int CurrentIndex public int CurrentIndex
{ {
get; set; get; set;
//get
//{
//if (_BeginIndex != 0)
//{
// _BeginIndex++;
// if (End)
// {
// return this.Count - 1;
// }
// return this._BeginIndex;
//}
//else
//{
// _BeginIndex = 1;
// return _BeginIndex;
// Random random = new Random();
// _BeginIndex = random.Next(0, this.Count);
// return _BeginIndex;
//}
//}
} = -1; } = -1;
/// <summary> /// <summary>
@ -74,7 +54,6 @@ namespace OnlineUserPool.Model
{ {
get get
{ {
//return this._BeginIndex >= this.Count;
return this.CurrentIndex >= this.Count; return this.CurrentIndex >= this.Count;
} }
} }

View File

@ -68,7 +68,9 @@ namespace OnlineUserPool.Model
_target._Bearing = double.Parse(split[8]); _target._Bearing = double.Parse(split[8]);
} }
} }
split = null;
return _target; return _target;
} }
} }

View File

@ -129,47 +129,40 @@ namespace OnlineUserPool.Services
this._dataBuffer.Append(item); this._dataBuffer.Append(item);
if (item != '}') continue; if (item != '}') continue;
Debug.WriteLine("收到消息:" + this._dataBuffer); Debug.WriteLine("收到消息:" + this._dataBuffer);
var s = this._dataBuffer.ToString();
var msg = JsonConvert.DeserializeObject<ReceiveModel>(this._dataBuffer.ToString()); var msg = JsonConvert.DeserializeObject<ReceiveModel>(s);
var ipEndPoint = IPEndPoint.Parse(this.Socket.RemoteEndPoint.ToString()); var ipEndPoint = IPEndPoint.Parse(this.Socket.RemoteEndPoint.ToString());
switch (msg.CommandType) switch (msg.CommandType)
{ {
case 1: case 1:
_action(ipEndPoint, JsonConvert.DeserializeObject<MsgModel>(this._dataBuffer.ToString())); _action(ipEndPoint, JsonConvert.DeserializeObject<MsgModel>(s));
break; break;
case 2: case 2:
_action(ipEndPoint, JsonConvert.DeserializeObject<SetClientCommand>(this._dataBuffer.ToString())); _action(ipEndPoint, JsonConvert.DeserializeObject<SetClientCommand>(s));
break; break;
case 3: case 3:
switch (msg.SubType) switch (msg.SubType)
{ {
case 0: case 0:
_action(ipEndPoint, _action(ipEndPoint,JsonConvert.DeserializeObject<CreateGameRoomCommand>(s));
JsonConvert.DeserializeObject<CreateGameRoomCommand>(this._dataBuffer.ToString()));
break; break;
case 1: case 1:
_action(ipEndPoint, _action(ipEndPoint,JsonConvert.DeserializeObject<JoinGameRoomCommand>(s));
JsonConvert.DeserializeObject<JoinGameRoomCommand>(this._dataBuffer.ToString()));
break; break;
case 2: case 2:
_action(ipEndPoint, _action(ipEndPoint,JsonConvert.DeserializeObject<GameRoomReadyCommand>(s));
JsonConvert.DeserializeObject<GameRoomReadyCommand>(this._dataBuffer.ToString()));
break; break;
case 3: case 3:
_action(ipEndPoint, _action(ipEndPoint,JsonConvert.DeserializeObject<GameRoomStartCommand>(s));
JsonConvert.DeserializeObject<GameRoomStartCommand>(this._dataBuffer.ToString()));
break; break;
case 4: case 4:
_action(ipEndPoint, _action(ipEndPoint,JsonConvert.DeserializeObject<GameRoomKickCommand>(s));
JsonConvert.DeserializeObject<GameRoomKickCommand>(this._dataBuffer.ToString()));
break; break;
case 5: case 5:
_action(ipEndPoint, _action(ipEndPoint,JsonConvert.DeserializeObject<GameRoomProcessCommand>(s));
JsonConvert.DeserializeObject<GameRoomProcessCommand>(this._dataBuffer.ToString()));
break; break;
case 6: case 6:
_action(ipEndPoint, _action(ipEndPoint,JsonConvert.DeserializeObject<QueryGameRoomListCommand>(s));
JsonConvert.DeserializeObject<QueryGameRoomListCommand>(this._dataBuffer.ToString()));
break; break;
} }
@ -178,14 +171,16 @@ namespace OnlineUserPool.Services
_action(ipEndPoint, msg); _action(ipEndPoint, msg);
break; break;
} }
this._dataBuffer.Clear(); this._dataBuffer.Clear();
s = null;
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
Log.Error($"接受到的数据处理时出错:{data}\r\n{ex.Message}\r\n{ex.StackTrace}"); Log.Error($"接受到的数据处理时出错:{data}\r\n{ex.Message}\r\n{ex.StackTrace}");
} }
data = null;
} }
protected override void OnError(SocketError error) protected override void OnError(SocketError error)

View File

@ -556,19 +556,19 @@ namespace OnlineUserPool.ViewModels
private void HandleGameRoomProcess(ReceiveModel msg) private void HandleGameRoomProcess(ReceiveModel msg)
{ {
var msg1 = msg as GameRoomProcessCommand; var msg1 = msg as GameRoomProcessCommand;
var room = RoomList.ToList().Where(c => c.RoomId == msg1.RoomId).FirstOrDefault(); var room = RoomList.ToList().FirstOrDefault(c => c.RoomId == msg1.RoomId);
var client = Clients.Where(c => c.MemberId == msg1.UserId).FirstOrDefault(); var client = Clients.FirstOrDefault(c => c.MemberId == msg1.UserId);
if (room != null) if (room != null)
{ {
var list = room.List; var list = room.List;
var player = list.Where(c => c.UserId == msg1.UserId).FirstOrDefault(); var player = list.FirstOrDefault(c => c.UserId == msg1.UserId);
if (player != null) if (player != null)
{ {
player.Process = msg1.Process; player.Process = msg1.Process;
} }
var notReady = list.Where(c => c.Process < TOTAL_PROCESS).Any();
var notReady = list.Any(c => c.Process < TOTAL_PROCESS);
var now = DateTime.Now; var now = DateTime.Now;
var timespan = now - room.StatusChangedTime; var timespan = now - room.StatusChangedTime;
//超时时间1分钟所有人强制开始 //超时时间1分钟所有人强制开始
if ((notReady && timespan.TotalSeconds > ROOM_TIME_OUT) || !notReady) if ((notReady && timespan.TotalSeconds > ROOM_TIME_OUT) || !notReady)
@ -837,51 +837,49 @@ namespace OnlineUserPool.ViewModels
private NetworkData HandleGzipNetworkData(List<MsgModel> list, HostModel item) private NetworkData HandleGzipNetworkData(List<MsgModel> list, HostModel item)
{ {
sb.Clear(); sb.Clear();
foreach (var obj in list.Where(m => m.CompetitionId == item.Competitionid).Select(m => m.ToString(2))) sb.Append("l{");
var runtimeList = list.Where(m => m.CompetitionId == item.Competitionid).Select(m => m.ToString(2)).ToList();
foreach (var obj in runtimeList)
{ {
sb.Append(obj); sb.Append(obj);
sb.Append("|"); sb.Append("|");
} }
sb.Remove(sb.Length - 1, 1); if (runtimeList.Any())
var temp = sb.ToString();
sb.Clear();
foreach (var obj in Clients.Where(c => c.IsWatch && c.Competitionid == item.Competitionid).Select(c => c.MemberId))
{
sb.Append(obj);
sb.Append("|");
}
if (sb.Length > 0)
{ {
sb.Remove(sb.Length - 1, 1); sb.Remove(sb.Length - 1, 1);
} }
var watchList1 = sb.ToString(); sb.Append("};w{");
var watchList = Clients.Where(c => c.IsWatch && c.Competitionid == item.Competitionid).Select(c => c.MemberId).ToList();
foreach (var obj in watchList)
{
sb.Append(obj);
sb.Append("|");
}
if (watchList.Any())
{
sb.Remove(sb.Length - 1, 1);
}
sb.Append("};e{");
sb.Clear(); var errorList = list.Where(c => c.RoomId > 0 || c.FrameRate > 0).ToList();
foreach (var c in list.Where(c => c.RoomId > 0 || c.FrameRate > 0)) foreach (var c in errorList)
{ {
sb.Append($"{c.MemberId},{c.RoomId},{c.FrameRate},{c.TotalTicks}"); sb.Append($"{c.MemberId},{c.RoomId},{c.FrameRate},{c.TotalTicks}");
sb.Append("|"); sb.Append("|");
} }
if (sb.Length > 0) if (errorList.Any())
{ {
sb.Remove(sb.Length - 1, 1); sb.Remove(sb.Length - 1, 1);
} }
sb.Append("};");
var e = sb.ToString();
sb.Clear();
sb.Append("*l{");
sb.Append(temp);
sb.Append("};w{");
sb.Append(watchList1);
sb.Append("};e{");
sb.Append(e);
sb.Append("};#");
var strV2 = sb.ToString(); var strV2 = sb.ToString();
var data2 = new NetworkData(strV2); var data2 = new NetworkData(strV2);
strV2 = null;
return data2; return data2;
} }
@ -1007,19 +1005,14 @@ namespace OnlineUserPool.ViewModels
return Encoding.UTF8.GetBytes(this._txt); return Encoding.UTF8.GetBytes(this._txt);
} }
public void Dispose()
{
//this._txt = null;
}
private byte[] GetCompressBytes() private byte[] GetCompressBytes()
{ {
var temp = this._txt; return Encoding.UTF8.GetBytes($"*{Convert.ToBase64String(CommonHelper.Compress(this._txt))}#");
if(temp[0] == '*')
{
temp = temp.Substring(1);
}
if(temp.Last() == '#')
{
temp = temp.Substring(0, temp.Length - 1);
}
return Encoding.UTF8.GetBytes($"*{ Convert.ToBase64String(CommonHelper.Compress(temp)) }#");
} }
} }
} }