我的表单上有一个ListView:TListview,并且我添加了很多值(大约25k TListViewItem),它运行得相当快,但是当我调用Listview.Clear时,程序卡住了。我用调试器检查了它,它赢了不要跨过那条线。
我的问题是:我该如何解决我的问题?如果可以在不到一秒的时间内创建这么多项目,为什么删除它们要花很长时间(我等了 5 分钟以上)?
最佳答案
您是否尝试将对 Clear 的调用封装在 BeginUpdate/EndUpdate block 中:
listview.Items.BeginUpdate;
try
listview.Items.Clear;
finally
listview.Items.EndUpdate;
end;
在 ListView (或各种其他控件,例如列表框)中添加/删除项目会针对添加/删除的每个项目触发控件的 GUI 更新。特别是对于 ListView ,这可能非常昂贵,对于 25,000 个项目,开销将是巨大的。
诚然,5 分钟确实听起来有点过分,但这将是我首先要尝试的事情。
关于delphi - TListView.Clear 卡住了我的应用程序,我该如何修复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1290145/