Некоторые очевидные наблюдения, которые могут помочь ...
- почему новый
MemoryStream
каждый раз в цикле? это самая насущная проблема
- почему бы и нет
AccumulatingBytes += Receivedbytes.Length;
Также; если вы сами не обрабатываете ошибки и пропущенные данные, используйте TCP.
Так что-то вроде:
ImageStream = new MemoryStream();
while (AccumulatingBytes <= TotalSizeOfComplexObject)
{
byte[] Recievedbytes = UdpListener.Receive(ref RemoteEndPoint);
ImageStream.Write(Recievedbytes, 0, Recievedbytes.Length);
AccumulatingBytes += Recievedbytes.Length;
}
затем установите ImageStream.Position = 0
перед десериализацией. Вам также, вероятно, следует проверить, что UdpListener
не сообщает о EOF.