title image


Smiley Massive Performanceeinbuße durch Fortschrittsanzeige
Hallo Michael!



Ein schönes Beispiel hast Du da rausgesucht. Du zahlst einen hohen (Zeit)preis für Dein A.P. Hier ein kleiner Test. Zum Stoppen der Zeiten habe ich eine kleine Kompo auf Basis Queryperformancecounter geproggt. Ich denke, das Ereignis steht für sich.

Ganz unangenehm wird es im Falle, wenn der Anwender während die Schleife läuft mehrmals auf den Button klickt. Daraus resultieren die "lustigsten" Seiteneffekte!

A.P arbeitet einfach nur die Message-Loop Deiner Anwendung ab und verteilt die Nachrichten an die Windowsprozeduren der betroffenen Fenster. In Deinem Falle wird ein WM_Paint an das Host-Fenster Deines Labels gesendet. Bei Update wird die zentrale Message-Loop umgangen und via Sendmessage WM_PAINT direkt an das Fenster geschickt. Aber schneller ist das auch nicht. Mit Deiner Pause wartest Du also einfach nur auf eine Nachricht, die Du für eine anstehende Aktion benötigst. Daher bin ich mir sicher, daß es für jedes Deiner Beispiele eine schnellere und elegantere Lösung gibt.



Natürlich kann die Reihenfolge der Units Fehler verursachen, da es durchaus Funktionen und Konstanten mit demselben Bezeicher gibt, die in mehreren Units deklariert sind. Und wer zuerst kommt, malt zuerst ...





procedure TForm1.Button1Click(Sender: TObject);

Var i,j:Integer;

begin

StopWatch.Start;

for I:=1 to 10000 do

begin

Label1.Caption:=IntToStr(i);

Application.ProcessMessages;

end;

StopWatch.Stop;

Listbox.Items.Add('ProcessMessages '+StopWatch.ResultString); // 1523 ms



StopWatch.Start;

for I:=1 to 10000 do

begin

Canvas.TextOut(100,50,IntToStr(i)); // 44 ms

end;

StopWatch.Stop;

Listbox.Items.Add('Canvas '+StopWatch.ResultString);



StopWatch.Start;

for I:=1 to 10000 do

begin

Label1.Caption:=IntToStr(i);

Label1.Update; // 1400 ms

end;

StopWatch.Stop;

Listbox.Items.Add('Update '+StopWatch.ResultString);



end;





Viele Grüsse



OLLI





geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: