gpt4 book ai didi

Delphi:为什么 IdHTTP.ConnectTimeout 使请求变慢?

转载 作者:行者123 更新时间:2023-12-03 14:51:01 30 4
gpt4 key购买 nike

我发现,当为 TIdHTTP 组件设置 ConnectTimeoout 属性时,它会使请求(GET 和 POST)变慢约 120 毫秒?

这是为什么,我可以以某种方式避免/绕过它吗?

Env:D2010 附带 Indy 组件,所有更新均针对 D2010 安装。操作系统是WinXP(32位)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,我得到了平均值。次130-140ms,没有的话大约5-15ms...

最佳答案

ConnectTimeout 为零(且 TIdAntifreeze 无效)时,Indy 只会进行连接。否则,TIdIOHandlerStack.ConnectClient 调用 DoConnectTimeout,它创建一个新线程来在调用线程休眠时进行连接并处理TIdAntifreeze操作,等待建立连接。如果超时后仍未建立连接,则会抛出异常。

线程不是空闲的,调用线程在检查连接线程是否完成其任务之前将始终处于 sleep 状态。默认 sleep 持续时间为125 毫秒。 (要使用其他功能,请激活 TIdAntifreeze 并将其 IdleTimeout 属性设置为低于 125。)

关于Delphi:为什么 IdHTTP.ConnectTimeout 使请求变慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2771658/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com