繁体   English   中英

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

[英]How to determine UDP socket buffer size in C#?

我将连续5分钟连续发送UDP包(1500字节)的ECG数据。 我可以使用什么是安全的socket.ReceiveBufferSize 我将过滤此数据并按数据顺序绘制它们。我想防止任何缓冲区问题。

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

找出或估计您的maxPacketsPerSec值,为maxPacketsPerSec选择一个安全/宽泛的值,范围从5(至少可以howManySecondsToBuffer最坏的垃圾收集暂停)到60(如果您howManySecondsToBuffer 300秒)完全偏执),然后进行数学运算。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM