C#获取系统上Socket.ReceiveBufferSize和Socket.SendBufferSize的最大值

Joe*_*Joe 13 c# sockets

我们的高吞吐量应用程序(~1gbps)从大型ReceiveBufferSize和SendBufferSize中获益匪浅.

我注意到在我的机器上我可以有100 MB的缓冲区大小没有问题,但在一些客户端和测试机器上,最大值略大于10 MB并且似乎是可变的.

是否有任何方法可以查询系统max tx/rx缓冲区大小.

Rem*_*anu 6

实际上,对于高性能网络SO_RCVBUF,SO_SNDBUF应根据KB181611将和选项设置为0以避免缓冲区副本:

如果使用SO_RCVBUF和SO_SNDBUF选项设置零TCP堆栈接收和发送缓冲区,则基本上指示TCP堆栈使用I/O调用中提供的缓冲区直接执行I/O. 因此,除了重叠套接字I/O的非阻塞优势之外,另一个优点是更好的性能,因为您为每个I/O调用在TCP堆栈缓冲区和用户缓冲区之间保存缓冲区副本.但是,一旦提交重叠操作并且在重叠操作完成之前,您必须确保不访问用户缓冲区.

您可以设置这些选项的最大值(这是托管背后的真实设置Socket.ReceiveBufferSize)是"依赖于实现".TCP/IP注册表设置中记录了其他TCP参数.