zoukankan      html  css  js  c++  java
  • 关于wcf的tcp绑定传文件的速率问题的深究

    前面有篇随笔比较了http、tcp和管道绑定的文件传输速率

    今天又特意比较了http和tcp每次Read的大小,结果是这样的:

    http绑定不管怎么样每次都是4096;

    tcp绑定与maxBytesPerRead属性有关。

    测试过程记录如下:

    tcp 客户端  maxBytesPerRead="4089"

    255 4083 12 4083 4083 4083 4083

    tcp 客户端  maxBytesPerRead="40890"

    255 4095 40884 24654 40884 24651 40884 24651 40884

    tcp 客户端  maxBytesPerRead="65536"

    255 4095 65529 9 65529 6 65529 9 65529 6

    tcp 客户端  maxBytesPerRead="65538"

    255 4095 65532 6 65532 6 3

    初步判断 这是 tcp的流量控制机制导致  每次大小的区别涉及到 tcp的滑动窗口

    窗口由16bit定义,所以最大支持65535个字节的缓冲 maxBytesPerRead基本上等于窗口大小+7

    TCP的最大报文长度是65535byte(即64K) 测试发现 最大长度可以达到65538byte(前提是maxBytesPerRead>65535+7)

    在程序中减少循环次数可以加快速度

    在这篇随笔中http://www.cnblogs.com/langu/archive/2013/02/26/2933309.html,本机wcf的tcp绑定传文件流模式60~70MB/s的速度(大概0.38秒),结合这篇随笔的结论,

    将maxBytesPerRead="65543" 每次Read的BufferSize设置为65536,结果流模式只需要0.16秒(大概155MB/s),速度提升了一倍之多。

    局域网wcf的tcp绑定流模式原来的2~3MB/s的速度(大概10秒),现在也只需要0.31秒(8.05MB/s)。

    这是本人目前测试时流模式下最快速度的设定。

    至于http为什么每次都是4096字节?还待继续深究

    在TCP的一本书中看到这样的介绍:

    接收方提供的窗口大小通常可以由接收经常控制,这将影响TCP的性能(HTTP在TCP之上)。

    迄今为止,SunOS,BSD/386和SVR4系统仍然使用4096字节的默认大小……

    ……对以太网而言,默认的4096字节并不是最理想的大小……《TCP/IP协议详解 卷一:协议》P214

  • 相关阅读:
    IE6下div遮盖select的最优解决方案
    jQuery一些常用特效方法使用实例
    你用什么工具开发JavaScript?
    抛弃jQuery 深入原生的JavaScript
    在JavaScript中实现yield,实用简洁实现方式。
    jquery复选框checkbox实现删除
    一系列JavaScript的基础工具
    jQuery一些常用特效方法使用实例
    JavaScript 文件上传类型判断
    Java大文件分片上传/多线程上传功能
  • 原文地址:https://www.cnblogs.com/langu/p/2938640.html
Copyright © 2011-2022 走看看