【问题标题】:improve transfer speed with Indy使用 Indy 提高传输速度
【发布时间】:2012-11-19 17:45:05
【问题描述】:

我需要使用 INDY10 组件将许多文件从一台 tcp indy 服务器传输到客户端。有没有办法通过为 TCP 客户端或服务器通信设置任何参数来提高传输速度。

文件大小:~ 10 MBYte .... 50 Mybte

文件大小是否有限制,我的电脑使用的是 WIN 7 x64 和 32 GBYTE RAM 我们的网络是 LAN。100 个其他位置的 LAN 已经改进为 GIGABIT LAN

  function SendStream(AContext: TIdContext; AStream: TStream): Boolean; overload;
  var
    StreamSize: LongInt;
  begin
    try
      Result := True;
      try
        StreamSize := (AStream.Size);

        // AStream.Seek(0, soFromBeginning);

        AContext.Connection.IOHandler.Write(LongInt(StreamSize));
        AContext.Connection.IOHandler.WriteBufferOpen;
        AContext.Connection.IOHandler.Write(AStream, 0, False);
        AContext.Connection.IOHandler.WriteBufferFlush;
      finally
        AContext.Connection.IOHandler.WriteBufferClose;
      end;
    except
      Result := False;
    end;
  end;

【问题讨论】:

  • 您发布的代码或有用信息绝对没有我们可以用来尝试帮助您。无论您使用的是 Win7 64 还是您拥有的文件大小都没有关系;如果没有代码,我们无法告诉您您是否做错了什么,或者您可以做些什么来改善它,因为我们不知道您现在在做什么。此外,您不需要在标题中添加标签信息 - 标签系统在这里运行良好,不需要任何帮助。 :-)
  • 或者你现在的速度。考虑到 TCP/IP 开销,它可能已经达到最大值。
  • 显示代码和实际数字以设置基线。
  • 不错的编辑,但是,您仍然没有告诉我们您当前的传输速度是多少?
  • 恕我直言,您可以实现的唯一速度改进实际上是通过压缩方式通过线路发送更少的字节(如果源文件是可压缩的)

标签: delphi indy indy10


【解决方案1】:

发送代码可以简化为

  function SendStream(AContext: TIdContext; AStream: TStream): Boolean;
  begin
    Result := True;
    try
      AContext.Connection.IOHandler.Write(AStream, 0, True);
    except
      Result := False;
    end;
  end;

第三个参数使 Indy 将流大小作为 Integer 或 Int64(取决于 TIdIOHandler.LargeStream 属性的值)值写入客户端。

客户端然后可以读取流大小和流使用

// reads the stream size then reads the stream data
Client.IOHandler.ReadStream(MyStream, -1, False);

(在Delphi TidTCPServer and TidTCPClient transferring a record中找到,只有传输方向相反)

【讨论】:

    【解决方案2】:

    直接发送流并保存正在制作的字节的另一个副本。特别是在您的示例中 - 删除提到 WriteBuffer 的 3 行代码。

    根据流的大小和并发客户端的数量,您可能会通过使用您并不真正需要的大型缓冲副本来破坏内存管理器。大传输的目标是限制某些东西必须处理整个流的次数。

    【讨论】:

    • 我会试试你的建议
    猜你喜欢
    • 2019-04-28
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    相关资源
    最近更新 更多