У меня возникли проблемы с утечкой памяти, которые, как я полагаю, вызваны объектами DateTime. Мой код получает целое число от клиента, создавая объект DateTime, генерируя целое число из этого объекта, сравнивая его с тем, что отправил клиент, и отправляя эти данные обратно. Это происходит каждые 1000 мс, когда клиент отправляет запрос на его пинг.Утечка памяти с объектами DateTime?
стороне клиента Код:
private void sendPingRequest()
{
List<byte> payloadData = new List<byte>();
DateTime now = DateTime.UtcNow;
int seconds = now.Second;
int ms = now.Millisecond;
int totalMs = (1000 * seconds) + ms;
payloadData.AddRange(BitConverter.GetBytes((short)26));
payloadData.AddRange(BitConverter.GetBytes(4));
payloadData.AddRange(BitConverter.GetBytes(totalMs));
client.GetStream().Write(payloadData.ToArray(), 0, payloadData.Count);
return;
}
Серверный код: (после того, как TcpListener считывает все данные)
private void handlePing(byte[] data, TcpClient sender)
{
int pingRequest = BitConverter.ToInt32(data, 0);
DateTime now = DateTime.UtcNow;
int seconds = now.Second;
int ms = now.Millisecond;
int realMs = (1000 * seconds) + ms;
int diff = realMs - pingRequest;
List<byte> backData = new List<byte>();
backData.AddRange(BitConverter.GetBytes((short)27));
backData.AddRange(BitConverter.GetBytes(4));
backData.AddRange(BitConverter.GetBytes(diff));
sender.GetStream().Write(backData.ToArray(), 0, backData.ToArray().Length);
}
Когда сервер получает один из этих запросов звона и отправляет данные назад, общая память приложения медленно начинает увеличиваться и экспоненциально возрастает в скорости.
Спасибо, любая помощь в решении этого очень ценится!
Список backData = новый Список (); - заявлено выше трех блоков. это байт [], который сокет записывает обратно клиенту. –
foxbot
Вы пробовали (как раз для того, чтобы играть хотя бы), чтобы выполнить полный GC? (GC третьего поколения), скажем, каждый 10-й запрос. Идея заключается в том, что в режиме сервера я знаю, что GC ведет себя немного по-другому, а коллекция объектов более расслаблена для получения производительности. –
Почему вы предполагаете, что происходит утечка памяти? GC, возможно, еще не ударил. –