我发现,在设置TIDHTTP组件的ConnectTimeOout属性时,它会使请求(GET和POST)变慢约120ms?

为什么要避免/绕过这一点?

Env:D2010带有发货的Indy组件,所有更新都为D2010安装。 OS是WinXP(32bit)SP3,其中大多数补丁...

我的时间常规是:

    Procedure DoGet;
    Var
       Freq,T1,T2 : Int64;
       Cli        : TIdHTTP;
       S          : String;
    begin
         QueryPerformanceFrequency(Freq);
         Try
            QueryPerformanceCounter(T1);
            Cli := TIdHTTP.Create( NIL );
            Cli.ConnectTimeout := 1000;  // without this we get < 15ms!!
            S := Cli.Get('http://127.0.0.1/empty_page.php');
         Finally
            FreeAndNil(Cli);
            QueryPerformanceCounter(T2);
         End;
         Memo1.Lines.Add('Time = '+FormatFloat('0.000',(T2-T1)/Freq) );
    End;

使用代码中的ConnectTimeOut设置,我获得了AVG。时间为130-140ms,没有大约5-15ms ...

有帮助吗?

解决方案

什么时候 ConnectTimeout 为零(并且 TIdAntifreeze 无效),Indy只是连接。除此以外, TIdIOHandlerStack.ConnectClient 呼叫 DoConnectTimeout, , 哪一个 创建一个新线程 进行连接时 通话线睡觉 和流程 TIdAntifreeze 运营,等待建立连接。如果超时时间没有连接,则会引发异常。

线程不是免费的,在检查连接线程是否完成任务之前,调用线程将始终入睡。默认睡眠时间是 125毫秒. 。 (要使用其他东西,请激活 TIdAntifreeze 并设置它 IdleTimeout 物业低于125。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top