DruckenMister WongFacebook

Fortschrittsbalken verlangsamen Ausführungsgeschwindigkeit

System Win9x, WinNT, Win2000, WinXP, Vista, Win7
Ab Delphi-Version Delphi 1
Letzte Änderung 28.09.2010

Fortschrittsbalken, in Delphi häufig in Form einer TProgressbar oder TGauge zu sehen, sollen dem Anwender zeigen, wie weit eine Operation schon fortgeschritten ist.Natürlich kostet das ständige Aktualisieren des Fortschrittsbalken Rechenzeit, womit die Ausführung der Operation teilweise erheblich verlangsamt wird, wie folgendes Beispiel zeigt:


procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  Progressbar1.Min:=0;
  Progressbar1.Max:=50000;
  for I:=0 to 50000-1 do
    Progressbar1.Position:=I;
end;
 

Es würde reichen, die Progressbar nur bei jedem n-ten mal zu aktualisieren:


procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  Progressbar1.Min:=0;
  Progressbar1.Max:=50000 div 100;
  for I:=0 to 50000-1 do
  begin
    if I mod 100 = 0 then
      Progressbar1.Position:=I div 100;
    //Rechenintensive Operationen
  end;
end;
 

Wie oft die Progressbar letztendlich aktualisiert werden soll, hängt natürlich von der jeweiligen Situation ab.Dazu sei gesagt, dass sich die Eigenschaft "Smooth" der Progressbar, falls sie den Wert True hat, ebenfalls negativ auf die Performance auswirkt.Damit eine Anwendung während einer langen Rechenphase noch benutzbar ist, ruft man in der Regel zwischenzeitlich Application.ProcessMessages auf. Dieser Aufruf kostet auch eine Menge Rechenzeit. Auch hierbei würde es wieder reichen, Application.ProcessMessages nur bei jedem n-ten Durchlauf aufzurufen.