优化C#访问网络时的效率问题

网络编程中Nagle算法和Delayed ACK的测试


我们是网络编程的时候,要不要禁止nagle算法呢,下面是一个结论,大家可以参考。再付一个C#可考虑提高网络访问效率的设置:
            //是否使用 Nagle 不使用 提高效率
            hwr.ServicePoint.Expect100Continue = false;
            hwr.ServicePoint.UseNagleAlgorithm = false;
            //最大连接数 个人测试感觉不是很明显,可能和自己的代码有关。也可以加这句 ServicePointManager.DefaultConnectionLimit = 50,我就是加这句的。
            //hwr.ServicePoint.ConnectionLimit = int.MaxValue;
            //数据是否缓冲 false 提高效率 如果涉及到用户登陆的话,还是不要加这一句。我就里就不加了。
            //hwr.AllowWriteStreamBuffering = false;

大家还有提高网络访问的方法,欢迎交流一下哦。QQ:1508496092.

结果跟禁用nagle算法的效果类似。既然这样,我们还有什么理由一定要禁用nagle算法呢?通过我在xmemcached的压测中的测试,启用nagle算法在小数据的存取上甚至有一定的效率优势,memcached协议本身就是个连续的请求应答的模型。上面的测试如果在windows上跑,会发现RTT最大会在200ms以上,可见winsock的delayed ack超时是200ms。


   最后一个问题,什么情况下才应该禁用nagle算法?当你的应用不是这种连续的请求——应答模型,而是需要实时地单向发送很多小数据的时候或者请求是有间隔的,则应该禁用nagle算法来提高响应性。一个最明显是例子是telnet应用,你总是希望敲入一行数据后能立即发送给服务器,然后马上看到应答,而不是说我要连续敲入很多命令或者等待200ms才能看到应答。


   上面是我对nagle算法和delayed ack的理解和测试,有错误的地方请不吝赐教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

概念西瓜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值