Fortschrittsbalken verlangsamen Ausführungsgeschwindigkeit
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.