【发布时间】:2012-03-23 10:09:43
【问题描述】:
我发现默认的 ReceiveBufferSize (8192) 对我不起作用 - 我丢失了数据包 Sockets: sometimes (rarely) packets are lost during receiving
但是 msdn 有关于增加 BufferSize 的警告:
http://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.receivebuffersize.aspx 较大的缓冲区大小可能会减少空确认(没有数据部分的 TCP 数据包)的数量,但也可能会延迟对连接困难的识别。如果您正在传输大文件,或者您正在使用高带宽、高延迟的连接(例如卫星宽带提供商),请考虑增加缓冲区大小。
我知道我需要每秒接收约 2000 个数据包,每个数据报包含大约 50-100 字节的数据。我正在使用低延迟连接(局域网中的所有内容)。我从 udp 多播接收证券交易所数据,所以有时我的流量显着跳跃(雷曼兄弟破产等),但假设我每秒接收的数据包不会超过 20 000 个。
如何计算适合我需要的 ReceiveBufferSize?
我绝对不同意丢失数据包,但我也不会丢失性能或可靠性或其他任何东西。
【问题讨论】:
-
备注是关于TCP的。如果您使用 TCP,那么您一开始就不会遇到这个问题。
-
@HansPassant 但如何选择 ReceiveBufferSize?我可以将其设置为 100 MB 并且不关心它吗?
-
曾经我在接收多播数据时遇到了同样的问题(~4000 个数据包/秒)。我将 ReceiveBufferSize 设置为 256K,问题就消失了。 (为什么是 256K?只是反复试验;))