int packetSize = 1500; // as stated in the question
int safeBufferSize = maxPacketsPerSec * packetSize * howManySecondsToBuffer;
Определите или оцените ваше значение для maxPacketsPerSec
, выберите безопасное / щедрое значение для howManySecondsToBuffer
, что-то в диапазоне, скажем, от 5 (по крайней мере, даже до самых плохих пауз для сбора мусора) до 60 (или даже полных 300 секунд, если вы полностью параноик), а затем сделайте математику.
Более важно, однако: выведите байты из буфера приема сокета как можно быстрее , передайте их в некоторую очередь, которая обрабатывается другим потоком или несколькими потоками, если это необходимо. Таким образом, ваша очередь в приложении буферизует столько, сколько у вас есть ОЗУ, и ваше значение Socket.ReceiveBufferSize
станет менее важным.