我们的高吞吐量应用程序(~1gbps)从大型ReceiveBufferSize和SendBufferSize中获益匪浅.
我注意到在我的机器上我可以有100 MB的缓冲区大小没有问题,但在一些客户端和测试机器上,最大值略大于10 MB并且似乎是可变的.
是否有任何方法可以查询系统max tx/rx缓冲区大小.
实际上,对于高性能网络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参数.
归档时间: |
|
查看次数: |
7627 次 |
最近记录: |