2

我正在将 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 是否有一些东西使它对于几千个字符串来说太慢了?

4

1 回答 1

4

在我的系统上使用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;
于 2020-07-24T01:02:55.643 回答