如何在C#中确定UDP套接字缓冲区大小?

时间:2011-02-18 08:33:38

标签: c# udp buffer

我将连续发送UDP数据包(1500字节)的ECG数据长达5分钟。什么是安全socket.ReceiveBufferSize我可以使用?我将过滤这些数据并绘制数据。我希望防止任何缓冲问题。

2 个答案:

答案 0 :(得分:0)

如果您想要防止任何问题,您需要使用TCP。 如果您使用的是udp,则可能会丢失数据或获取错误的数据包序列。

答案 1 :(得分:0)

int packetSize = 1500; // as stated in the question
int safeBufferSize = maxPacketsPerSec * packetSize * howManySecondsToBuffer;

计算或估算maxPacketsPerSec的价值,为howManySecondsToBuffer选择一个安全/慷慨的价值,比如说5的范围(至少可以防止最糟糕的垃圾收集暂停)到60岁(如果你是完全偏执的话,甚至是整整300秒),然后做数学运算。

更重要的是:尽可能快地将字节从套接字接收缓冲区中取出,将它们移交给某个队列,该队列由其他一些线程或多个线程处理,如果需要的话。这样,您的应用内队列将缓冲RAM,并且Socket.ReceiveBufferSize值将变得不那么重要。