Я захватываю рабочий стол с помощью API Desktop Duplication, кодирую его в h265 и отправляю его частями через UDP (не могу использовать TCP, потому что мне нужна минимальная задержка). Я делаю все это в C # и Visual Studio, и использование памяти идет вверх, как только я раскомментирую udpclient.Send ().
С этим комментарием все прекрасно работает (включая захват кадров, разбиение и т. Д.), Как только я отправляю его, я использую метку 2 ГБ менее чем за 10 секунд, и он продолжает увеличиваться до сбои. Кроме того, ни одна из данных не теряется, так как мой сервер получает все, поэтому управление пакетами мне кажется хорошим.
int offset = 0;
int packetSize = 200;
for (int i=0; i< clone.Length/packetSize; i++)
{
int diff = clone.Length - offset;
if (diff > packetSize)
Array.ConstrainedCopy(clone, offset, subBuffer, 0, packetSize);
else
Array.ConstrainedCopy(clone, offset, subBuffer, 0, diff);
udpClient.Send( subBuffer, packetSize, "255.255.255.255", 9009);
offset += packetSize;
}
Я на этом этапе просто экспериментирую с расщеплением и всем остальным, и, как уже говорилось, ни одна из этих частей не создает проблем (я знаю, что это можно сделать лучше). Это просто udpclient.Send (), который делает все не так. Любая идея о том, что может вызвать это, и как я мог как-то заставить управление памятью с посылкой?