मुझे पता चला कि TIdHTTP घटक के लिए कनेक्टटाइमआउट प्रॉपर्टी सेट करते समय, यह अनुरोध करता है (GET और POST) लगभग 120 मिमी धीमा हो जाता है?डेल्फी: IdHTTP.ConnectTimeout अनुरोध धीमा क्यों करता है?
यह क्यों है, और क्या मैं इसे किसी भी तरह से टालना/बाईपास कर सकता हूं?
एनवी: डी 2010 भेजे गए इंडी घटकों के साथ, डी 2010 के लिए सभी अद्यतन स्थापित किए गए। ओएस सबसे पैच के साथ 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 ...
"कॉलिंग थ्रेड हमेशा यह जांचने से पहले सो जाएगा कि कनेक्शन थ्रेड ने अपना कार्य पूरा कर लिया है या नहीं।" यह पुराने संस्करणों में सच था, लेकिन यह मार्च 2008 से सच नहीं रहा है। –
"यह पुराने संस्करणों में सच था, लेकिन मार्च 2008 से यह सच नहीं हुआ है।" - और यह एक अच्छी बात है क्योंकि पुराने व्यवहार (और शायद किया गया है) एक बग माना जाना चाहिए। – TheBlastOne
इस सवाल को टक्कर देने के लिए खेद है, लेकिन मैं 10.2 टोक्यो का उपयोग कर रहा हूं और मुझे ओपी के रूप में एक ही व्यवहार का अनुभव हो रहा है, टाइमआउट के बिना 10-15ms कनेक्शन समय, 130-140ms के साथ। तो ऐसा लगता है कि "कनेक्शन थ्रेड ने अपना काम पूरा कर लिया है या नहीं, यह जांचने से पहले कॉलिंग थ्रेड हमेशा सो जाएगा" अभी भी चालू है। – Bozzy