![]() |
Indy: Connect dauert unnötig lange
In Wireshark fiel mir auf dass der Socket zwischen dem PC und einem Gerät sehr schnell aufgebaut wird, der PC allerdings erst 125 ms danach sich traut etwas zu schicken.
Ich wühlte etwas im Indy Sourcecode und siehe da: IdIOHandlerStack.pas
Delphi-Quellcode:
Abgesehen davon dass ich das mit einem reinen Sleep relativ ungeschickt gelöst finde (warum kein Event auf das gewartet wird) - Wie vernünftig sind hier die hartkodierten 125 ms? Ist das nicht ein bisschen sehr viel?
procedure TIdIOHandlerStack.ConnectClient;
procedure DoConnectTimeout(ATimeout: Integer); var LSleepTime: Integer; LThread: TIdConnectThread; begin if ATimeout = IdTimeoutDefault then begin ATimeout := IdTimeoutInfinite; end; LThread := TIdConnectThread.Create(Binding); try // IndySleep if TIdAntiFreezeBase.ShouldUse then begin LSleepTime := IndyMin(GAntiFreeze.IdleTimeOut, 125); end else begin LSleepTime := 125; end; if ATimeout = IdTimeoutInfinite then begin while not LThread.Terminated do begin IndySleep(LSleepTime); TIdAntiFreezeBase.DoProcess; end; end else begin // decrement by the sleep interval. If IndySleep() runs longer then // requested, that would slow down the loop and exceed the original // timeout that was requested... while (ATimeout > 0) and (not LThread.Terminated) do begin IndySleep(IndyMin(ATimeout, LSleepTime)); TIdAntiFreezeBase.DoProcess; Dec(ATimeout, IndyMin(ATimeout, LSleepTime)); end; end; (...) |
AW: Indy: Connect dauert unnötig lange
Ich nutze faul das bei Delphi 10.0 Seattle mitgelieferte. In der Zwischenzeit scheint sich bei Indy an dieser Stelle etwas getan zu haben.
![]() Ich muss erst einmal rausfinden wie man seine Indy-Version aktualisiert, dann probiere ich es noch einmal. Danke fürs Mitfiebern schon einmal. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz