Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 使用Indy提高传输速度_Delphi_Indy_Indy10 - Fatal编程技术网

Delphi 使用Indy提高传输速度

Delphi 使用Indy提高传输速度,delphi,indy,indy10,Delphi,Indy,Indy10,我需要使用INDY10组件将多个文件从一个tcp indy服务器传输到一个客户端。是否有办法通过设置TCP客户端或服务器通信的任何参数来提高传输速度 文件大小:~10 MB。。。。50多年电价 文件大小是否有限制,我的电脑使用的是WIN 7 x64和32 GBYTE RAM我们的网络是LAN。100其他位置的LAN已改进为千兆LAN function SendStream(AContext: TIdContext; AStream: TStream): Boolean; overload;

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

文件大小:~10 MB。。。。50多年电价

文件大小是否有限制,我的电脑使用的是WIN 7 x64和32 GBYTE RAM我们的网络是LAN。100其他位置的LAN已改进为千兆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;

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


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

发送代码可以减少到

  function SendStream(AContext: TIdContext; AStream: TStream): Boolean;
  begin
    Result := True;
    try
      AContext.Connection.IOHandler.Write(AStream, 0, True);
    except
      Result := False;
    end;
  end;
第三个参数导致Indy将流大小作为整数或Int64(取决于TIdIOHandler.LargeStream属性的值)写入客户端

然后,客户端可以使用

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

(只在传输方向相反的地方找到)

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