Delphi:为什么IDHTTP.ConnectTimeOut使请求较慢?
题
我发现,在设置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。)
不隶属于 StackOverflow