lke*_*ler 2 delphi optimization statusbar
在Delphi中更新状态栏需要花费很长时间!
示例:我搜索文件并显示状态栏中找到和搜索的文件数:
OwnerForm.StatusBar1.SimpleText
:= Format('Searching (%d found in %d files) ...', [NumFound, Total]);
Run Code Online (Sandbox Code Playgroud)
对于每200次更新状态栏,搜索大约增加1秒的时间.
有没有办法减少这种过多的开销,但仍然更新用户的状态?
不要快速更新状态栏.如果您经常更新它会对您的性能产生严重影响,用户将如何阅读状态?
此外,我运行了一个小测试,显示它在超过100毫秒的时间内更新状态栏1000次.这是我5岁便宜的家用电脑.
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
a: Cardinal;
begin
a := GetTickCount;
for i := 0 to 1000 do
begin
StatusBar1.SimpleText := IntToStr(i);
end;
ShowMessage(IntToStr(GetTickCount - a));
end;
Run Code Online (Sandbox Code Playgroud)
[编辑]
替代方案:
TForm1 = class(TForm)
StatusBar1: TStatusBar;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
FLastUpdate: TDateTime;
public
procedure UpdateStatus(Status: string);
procedure ForceStatus(Status: string);
end;
procedure TForm1.ForceStatus(Status: string);
begin
StatusBar1.SimpleText := Status;
FLastUpdate := Now;
end;
procedure TForm1.UpdateStatus(Status: string);
begin
if MilliSecondsBetween(Now, FLastUpdate) > 500 then
begin
StatusBar1.SimpleText := Status;
FLastUpdate := Now;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
a: Cardinal;
begin
a := GetTickCount;
for i := 0 to 1000000 do
begin
// unimportant: progress
UpdateStatus(IntToStr(i));
end;
// Important: final state
ForceStatus(Format('Done in %d milliseconds', [GetTickCount - a]));
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1140 次 |
| 最近记录: |