Я пишу программное обеспечение, которое будет получать данные из UDP-пакета, а затем записывать его в файл. Это пример кода, который я написал как консольное приложение, чтобы проверить класс UdpClient.Будет ли переполнение буфера таймера во время ожидания приема UDP?
while(!done)
{
Console.WriteLine("Receiving");
byte[] bytes = listener.Receive(ref groupEP);
Console.WriteLine("Received");
}
я узнал, что, если не было получено никаких UDP пакетов, в то время как цикл будет пауза в функции Receive (исх groupEP). Только тогда, когда будет получен пакет UDP, он перейдет к печати «Получено».
Однако для реальной программы (WPF), чтобы сохранить ресурсы, вместо этого я использую таймеры. В настоящее время он отлично работает для обновления интерфейса и файла, но мне было интересно, что произойдет, если таймер вызывается каждые 100 мс, тогда как UDP-пакеты принимаются только через 1 секунду (если я не знаю, когда я получу UDPs поэтому я выбираю 100 мс). Не будет ли это результатом 9 избыточных вызовов таймера каждые 1 секунду, и это приведет к переполнению? В настоящее время приложение отлично работает для этого scenerio, но я хотел бы понять, почему и если есть какие-либо возможные последствия.
Не будет ли то же самое, если я продолжаю называть ReceiveFrom(), только что я продолжаю генерировать асинхронные потоки с помощью функции вызова по таймеру? – Mittens
Извините, если мой ответ был недостаточно ясным. Я отредактирую его, чтобы попытаться его улучшить. Вы будете называть 'BeginReceiveFrom()' только один раз за датаграмму. После первого вызова вы ничего не делаете до тех пор, пока он не завершится, и вы обработали дейтаграмму. Затем вы вызываете это снова. Вы не будете использовать таймер вообще в этом подходе. –