performance - 创建和慢表示大量 TLabel 运行时

标签 performance delphi runtime delphi-xe2

在我的应用程序中,我使用 TLabel对象运行时。

有一个问题:代表 20 个标签需要很长时间(大约 1-2 秒)。

父组件上的 DoubleBuffered 没有帮助。 Application.ProcessMessages只允许查看创建过程,而不是查看卡住的窗口。

// creating a labels in loop 
aLabel:=TLabel.Create(scrlbx);
labels.Add(aLabel); // TList for managing.
with aLabel do begin
Left:=pointLeft;
    Top:=pointTop;
    Caption:='title';
    parent:=scrlbx; //TScrollBox
end;
pointTop:=pointTop+20;

将父级分配到另一个循环后会产生一些效果,但不能解决问题。
for I := 0 to labels.Count-1 do begin
    TLabel(labels[i]).Parent:= scrlbx;
end;

禁用和启用 TScrollBox.Visible before 和 aftel 循环没有效果。

PS:
对象的创建不需要时间。
瓶颈是 parent 分配。

更新:大量意味着大约 500 件元素。

最佳答案

使用ScrollBox.DisableAlign.EnabledAlign .

procedure TForm1.CreateLabels2;
var
  I: Integer;
  ALabel: TLabel;
  ATop: Integer;
begin
  ATop := 0;
  ScrollBox2.DisableAlign;
  for I := 0 to 2000 do
  begin
    ALabel := TLabel.Create(ScrollBox2);
    FLabels.Add(ALabel);
    with ALabel do
    begin
      Caption := 'Title';
      SetBounds(0, ATop, Width, Height);
      Parent := ScrollBox2;
    end;
    Inc(ATop, 20);
  end;
  ScrollBox2.EnableAlign;
end;

enter image description here

关于performance - 创建和慢表示大量 TLabel 运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10409677/

相关文章:

java - 饼图的自定义 AdapterView

delphi - 进一步澄清 : How to correctly write Try. .Finally ..除了语句?

delphi - 如何在 Delphi 7 中设置调试器参数?

delphi - 比较 Delphi 异常处理程序

linux - 如果程序在虚拟机上运行,​​系统执行时间会改变吗?

java - 如何像执行实际 Java 代码一样执行控制台或 GUI 输入?

java - 自定义脚本编辑器

javascript - 在 JavaScript 数组中查找唯一对象的最快方法

c - 为什么 Swift 在这个图像处理测试中比 C 慢 100 倍?

c# - c# 'bracketed' 类型转换的运行时等效项是什么