Tôi phát hiện ra rằng khi thiết lập thuộc tính ConnectTimeoout cho một thành phần TIdHTTP, nó làm cho các yêu cầu (GET và POST) trở nên chậm hơn khoảng 120ms?Delphi: Tại sao IdHTTP.ConnectTimeout thực hiện yêu cầu chậm hơn?
Tại sao điều này và tôi có thể tránh/bỏ qua điều này bằng cách nào đó?
Env: D2010 được vận chuyển thành phần Indy, tất cả các bản cập nhật được cài đặt cho D2010. OS là WinXP (32bit) SP3 với hầu hết các bản vá lỗi ...
thường xuyên thời gian của tôi là:
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;
Với bộ ConnectTimeout trong mã tôi nhận được trung bình. thời gian 130-140ms, không có khoảng 5-15ms ...
"chuỗi cuộc gọi sẽ luôn ngủ trước khi kiểm tra xem chuỗi kết nối đã hoàn thành nhiệm vụ hay chưa". Điều đó đúng trong các phiên bản cũ, nhưng điều đó không đúng kể từ tháng 3 năm 2008. –
"Điều đó đúng trong các phiên bản cũ, nhưng điều đó không đúng kể từ tháng 3 năm 2008." - và đó là một điều tốt vì hành vi cũ hơn nên được (và có thể đã được) coi là một lỗi. – TheBlastOne
Xin lỗi vì đã làm phiền câu hỏi này, nhưng tôi đang sử dụng 10.2 Tokyo và tôi đang trải qua hành vi giống như OP, thời gian kết nối 10-15ms mà không hết thời gian chờ, 130-140ms với. Vì vậy, có vẻ như "các thread gọi sẽ luôn luôn ngủ trước khi kiểm tra xem các chủ đề kết nối đã hoàn thành nhiệm vụ của mình" vẫn còn hiện hành. – Bozzy