Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Download process bei Indy Component ? (https://www.delphipraxis.net/130191-download-process-bei-indy-component.html)

thomas2009 4. Mär 2009 22:15


Download process bei Indy Component ?
 
Hallo

mit dem Code kann ich eine Datei schnell downloaden:
Delphi-Quellcode:
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;
Ich muss in Ereignis :
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):
http://www.delphipraxis.net/internal...ct.php?t=81071

SirThornberry 5. Mär 2009 06:06

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.

thomas2009 5. Mär 2009 10:22

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:

Luckie 5. Mär 2009 10:24

Re: Download process bei Indy Component ?
 
Windows ist nun mal nicht für schnelle Grafikoperationen ausgelegt.

thomas2009 5. Mär 2009 11:20

Re: Download process bei Indy Component ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Luckie
Windows ist nun mal nicht für schnelle Grafikoperationen ausgelegt.

Seit wann ist das ?!
das stimmt überhaupt nicht. Schaue mal der Power FireFox :wink:
Ich verwende FireFox unter Windows XP :mrgreen:

hoika 5. Mär 2009 11:39

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

mirage228 5. Mär 2009 11:59

Re: Download process bei Indy Component ?
 
Und evtl. Application.ProcessMessages nur alle 5% aufrufen oder bei jedem 10ten Aufruf von OnWork() ... Delphi-Referenz durchsuchenmod

thomas2009 5. Mär 2009 13:07

Re: Download process bei Indy Component ?
 
Zitat:

Zitat von mirage228
Und evtl. Application.ProcessMessages nur alle 5% aufrufen oder bei jedem 10ten Aufruf von OnWork() ... Delphi-Referenz durchsuchenmod

Das könnte das Download beschleunigen. Aber wie kann das einbauen ?

Luckie 5. Mär 2009 13:11

Re: Download process bei Indy Component ?
 
Zitat:

Zitat von thomas2009
Zitat:

Zitat von Luckie
Windows ist nun mal nicht für schnelle Grafikoperationen ausgelegt.

Seit wann ist das ?!
das stimmt überhaupt nicht. Schaue mal der Power FireFox :wink:
Ich verwende FireFox unter Windows XP :mrgreen:

Was hat jetzt die Downloadrate mit schnellen Garfikoperationen zu tun?

hoika 5. Mär 2009 13:20

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.
Seite 1 von 2  1 2      

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