Нет ideal figure
, который вы можете предоставить для ReceiveBufferSize на основании предоставленной вами информации.
Помимо вашего worse-case incoming data rate
, это зависит от rate at which you process messages
и от того, можете ли вы продолжать делать это, когда вас засыпают сообщениями.
Как уже упоминалось в комментарии к вашему вопросу, вы должны профиль ваше заявление в стрессовых условиях, чтобы найти лучшее значение, которое работает all the time
для вас.
В качестве альтернативы, вы можете начать со значения по умолчанию ReceiveBufferSize и увеличивать его, когда вы пересекаете порог, когда вы ожидаете потерять пакеты, и снова снижаете его, когда ситуация нормализуется. Этот подход требует много работы.
РЕДАКТИРОВАНИЕ:
В среднем вы будете обрабатывать данные быстрее, чем вы их получите. Но могут быть ситуации, когда вы , возможно, не сможете process data at all
(например, вам, возможно, придется записывать в базу данных синхронно или последовательно каждые 100 полученных вами сообщений). В этом случае вы должны убедиться, что ваш буфер может обрабатывать данные, поступающие в at that moment.
Поскольку в худшем случае вы можете получать до 20 тыс. Пакетов в секунду, каждый из которых имеет размер 100 байт, если вы установите размер буфера в 2 МБ (20 тыс. * 100 байт), вы сможете работать примерно секунду without processing any data
из дальнего конца.
Аналогично, если вы ожидаете, что ваш поток будет работать без чтения из буфера, дольше x секунд, тогда размер буфера должен быть x * 2 MB + (expected size of buffer at such a time)
Надеюсь, это поможет.