Как определить размер буфера сокета UDP в C #? - PullRequest
1 голос
/ 18 февраля 2011

Я буду отправлять UDP-пакеты (1500 байт) данных ЭКГ непрерывно до 5 минут. Что такое сейф socket.ReceiveBufferSize, который я мог бы использовать? Я буду фильтровать эти данные и наносить на график данные по мере их поступления. Я хочу предотвратить любые проблемы с буфером.

Ответы [ 2 ]

0 голосов
/ 03 февраля 2015
int packetSize = 1500; // as stated in the question
int safeBufferSize = maxPacketsPerSec * packetSize * howManySecondsToBuffer;

Определите или оцените ваше значение для maxPacketsPerSec, выберите безопасное / щедрое значение для howManySecondsToBuffer, что-то в диапазоне, скажем, от 5 (по крайней мере, даже до самых плохих пауз для сбора мусора) до 60 (или даже полных 300 секунд, если вы полностью параноик), а затем сделайте математику.

Более важно, однако: выведите байты из буфера приема сокета как можно быстрее , передайте их в некоторую очередь, которая обрабатывается другим потоком или несколькими потоками, если это необходимо. Таким образом, ваша очередь в приложении буферизует столько, сколько у вас есть ОЗУ, и ваше значение Socket.ReceiveBufferSize станет менее важным.

0 голосов
/ 18 февраля 2011

Если вы хотите предотвратить любые проблемы, вам нужно использовать TCP. В случае, если вы используете udp, вы можете потерять данные или получить неверную последовательность пакетов.

...