我知道在VCL控件(如TListBox)上使用BeginUpdate和EndUpdate会加快使用Items填充控件的过程,因为它会阻止控件重画,直到调用EndUpdate.
例:
- procedure TForm1.AddItems;
- var
- i: Integer;
- begin
- Screen.Cursor := crHourGlass;
- try
- for i := 0 to 5000 do
- begin
- ListBox1.Items.Add('Item' + IntToStr(i));
- end;
- finally
- Screen.Cursor := crDefault;
- end;
- end;
上述将会延迟,因为ListBox被允许重绘,但延迟可以通过防止重画如此缩短:
现在我用TStringList测试了这个:
- procedure TForm1.AddItems;
- var
- SL: TStringList;
- i: Integer;
- begin
- SL := TStringList.Create;
- try
- Screen.Cursor := crHourGlass;
- try
- SL.BeginUpdate;
- try
- for i := 0 to 5000 do
- begin
- SL.Add('Item' + IntToStr(i));
- end;
- finally
- SL.EndUpdate;
- end;
- ListBox1.Items.Assign(SL);
- finally
- Screen.Cursor := crDefault;
- end;
- finally
- SL.Free;
- end;
- end;
看来,无论TStringList如何使用BegindUpdate和EndUpdate,列表都以相同的速度进行填充.
他们真的需要,因为TStringList是在内存而不是视觉上执行的.我应该在TStringList上使用BeginUpdate和EndUpdate,这样做很好吗?
我觉得愚蠢的问这个问题,为什么TStringList有程序BeginUpdate和EndUpdate?
我想我可能在这里回答了我自己的问题,无论如何,我想听听你的看法.
谢谢 :)