Использование NetworkStream TCPClient и protobuf-net Я отправляю и получаю сообщения protobuf через TCP. Прием осуществляется с помощью следующего метода, который работает в отдельном потоке:Как правильно обрабатывать входящее сообщение protobuf с помощью NetworkStream?
private void HandleClientComm()
{
using (NetworkStream stream = m_Stream)
{
object o;
while (true)
{
if (stream.CanRead && stream.DataAvailable)
{
o = null;
if (Serializer.NonGeneric.TryDeserializeWithLengthPrefix(stream, PrefixStyle.Base128, Utilities.CommunicationHelper.resolver, out o))
{
if (o != null)
{
//Do something with the incoming protobuf object
}
}
Thread.Sleep(1);
}
}
}
}
Это прекрасно работает, но у меня есть проблема с сборщика мусора. Похоже, что старые объекты protobuf все еще хранятся в памяти. Большое сообщение приводит к System.OutOfMemoryExceptions через некоторое время.
Явное вызов GC.Collect()
перед сном устраняет эту проблему. Но это, очевидно, замедляет все. Как я могу справиться с этим правильно?