首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Indy提高传输速度

使用Indy提高传输速度
EN

Stack Overflow用户
提问于 2012-12-02 04:11:07
回答 2查看 2K关注 0票数 1

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

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

文件大小有限制吗?我的电脑使用的是WIN 7 x64和32G内存我们的网络是局域网100个其他位置的局域网已经改进为千兆局域网

代码语言:javascript
运行
复制
  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;
EN

回答 2

Stack Overflow用户

发布于 2012-12-03 17:25:00

发送代码可以简化为

代码语言:javascript
运行
复制
  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属性的值)值写入客户端。

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

代码语言:javascript
运行
复制
// reads the stream size then reads the stream data
Client.IOHandler.ReadStream(MyStream, -1, False);

(在仅传输方向相反的Delphi TidTCPServer and TidTCPClient transferring a record中找到)

票数 2
EN

Stack Overflow用户

发布于 2012-12-03 00:39:19

直接发送流并保存所创建的字节的另一个副本。具体来说,在您的示例中-删除提到WriteBuffer的3行代码。

根据流的大小和并发客户端的数量,您可能会通过使用并不真正需要的大型缓冲副本来解决内存管理器中的问题。在大型传输中,您的目标是限制处理整个流的次数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13663274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档