Delphi FMX TListBox 大列表慢
Delphi FMX TListBox slow with large lists
我正在将 2,000 个名称加载到 FMX TListBox 中,这花费的时间太长了(比如 35 秒或更长时间)。
这里是测试代码:
procedure TDocWindow.DEBUGAddLotsOfStringsToList;
var
theTimeAtStart: Integer;
J: Integer;
begin
ListBox1.Clear;
theTimeAtStart := TThread.GetTickCount;
for J := 1 to 2200 do
begin
ListBox1.Items.Add(j.toString);
end;
ShowMessage('There were ' + J.ToString + ' strings added to the list in ' + (TThread.GetTickCount - theTimeAtStart).ToString + ' milliseconds.');
end;
TListBox 是否有什么东西让它对于几千个字符串来说太慢了?
使用 BeginUpdate
和 EndUpdate
将我的系统运行时间从 25 秒减少到大约 125 毫秒。
procedure TForm1.Button1Click(Sender: TObject);
var
theTimeAtStart: Integer;
J: Integer;
begin
theTimeAtStart := TThread.GetTickCount;
ListBox1.Items.BeginUpdate;
try
ListBox1.Clear;
for J := 1 to 2200 do
begin
ListBox1.Items.Add(j.ToString());
end;
finally
ListBox1.Items.EndUpdate;
end;
ShowMessage('There were ' + J.ToString + ' strings added to the list in ' + (TThread.GetTickCount - theTimeAtStart).ToString + ' milliseconds.');
end;
我正在将 2,000 个名称加载到 FMX TListBox 中,这花费的时间太长了(比如 35 秒或更长时间)。
这里是测试代码:
procedure TDocWindow.DEBUGAddLotsOfStringsToList;
var
theTimeAtStart: Integer;
J: Integer;
begin
ListBox1.Clear;
theTimeAtStart := TThread.GetTickCount;
for J := 1 to 2200 do
begin
ListBox1.Items.Add(j.toString);
end;
ShowMessage('There were ' + J.ToString + ' strings added to the list in ' + (TThread.GetTickCount - theTimeAtStart).ToString + ' milliseconds.');
end;
TListBox 是否有什么东西让它对于几千个字符串来说太慢了?
使用 BeginUpdate
和 EndUpdate
将我的系统运行时间从 25 秒减少到大约 125 毫秒。
procedure TForm1.Button1Click(Sender: TObject);
var
theTimeAtStart: Integer;
J: Integer;
begin
theTimeAtStart := TThread.GetTickCount;
ListBox1.Items.BeginUpdate;
try
ListBox1.Clear;
for J := 1 to 2200 do
begin
ListBox1.Items.Add(j.ToString());
end;
finally
ListBox1.Items.EndUpdate;
end;
ShowMessage('There were ' + J.ToString + ' strings added to the list in ' + (TThread.GetTickCount - theTimeAtStart).ToString + ' milliseconds.');
end;