![]() |
Download process bei Indy Component ?
Hallo
mit dem Code kann ich eine Datei schnell downloaden:
Delphi-Quellcode:
Ich muss in Ereignis :
procedure TForm1.Button1Click(Sender: TObject);
var Stream:TMemoryStream; http:TidHttp; name,url:string; begin url:='http://xxx.com/test.exe'; //download url name:='c:\test.exe'; // try try Stream := TMemoryStream.Create; http:=TIdHTTP.Create(self); HTTP.Request.Referer := 'http://www.xxx.com'; HTTP.Get(Url,Stream); if FileExists(Name) then DeleteFile(Name); Stream.SaveToFile(Name); except on e:exception do begin //... end; end; finally Stream.Free; http.Free; end; end; OnWork OnWorkbegin OnWorkEnd was eingeben, damit ich die Prozess in Statusbar anschauen Hier habe ich so ähnlich aber der Code ist ganz ganz langsam (mehr als 10 Mals langsamer als normal): ![]() |
Re: Download process bei Indy Component ?
das der Code langsamer ist, ist nicht verwunderlich. Denn im Normalfall lädt man einfach die Daten und fertig. Wenn du jedoch den Status aktuallisierst werden erst noch Messages verarbeitet (eventuell noch Threads syncronisiert) etc. Bau einfach mal eine Zeitmessung in den Work events ein (mit QuertyPerformanceCounter) und du wirst sehen das die visuelle Ausgabe einiges an Zeit verschlingt.
|
Re: Download process bei Indy Component ?
Ja verstehe ich aber das Problem ist nicht 2 Mal langsamer sondern 10 Mals bzw mehr als 1000% Zeit mehr braucht :mrgreen:
|
Re: Download process bei Indy Component ?
Windows ist nun mal nicht für schnelle Grafikoperationen ausgelegt.
|
Re: Download process bei Indy Component ?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
das stimmt überhaupt nicht. Schaue mal der Power FireFox :wink: Ich verwende FireFox unter Windows XP :mrgreen: |
Re: Download process bei Indy Component ?
Hallo,
ich kenne mich damit nicht so gut aus. Aber: wie oft wird denn das OnWork aufgerufen ? Im verlinkten Thread wird bei jedem Aktualsieren Application.ProcessMessages aufgerufen. Warum ? Wenn ich z.B. einen ProgressBar nehme, dann muss nur beim Ändern der Anzeige (altes % <> neues %) aktualisiert werden.
Delphi-Quellcode:
if iNewPercent>iCurPercent then
begin // aktualisieren // neuen Wert merken iCurPercent:= iNewPercent; ProcessMessages end; Heiko |
Re: Download process bei Indy Component ?
Und evtl. Application.ProcessMessages nur alle 5% aufrufen oder bei jedem 10ten Aufruf von OnWork() ...
![]() |
Re: Download process bei Indy Component ?
Zitat:
|
Re: Download process bei Indy Component ?
Zitat:
|
Re: Download process bei Indy Component ?
Hallo,
< Das könnte das Download beschleunigen. Aber wie kann das einbauen ? > mit mod, wie es oben steht
Delphi-Quellcode:
if (iCurPercent mod 5) =0 then
begin ProgressBar. App.ProcMess. end; Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:36 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