我想知道为什么有两种不同的方式来清除列表视图。一种是通过调用listview.clear
,另一种是listview.items.clear
。实际上,这也扩展到许多其他 VCL 组件。必须使用哪种方法,为什么?
问问题
4082 次
2 回答
22
ListView.Clear
只是/ListView.Items.Clear
的包装。看源码:ListItems.BeginUpdate
ListItems.EndUpdate
procedure TCustomListView.Clear;
begin
FListItems.BeginUpdate;
try
FListItems.Clear;
finally
FListItems.EndUpdate;
end;
end;
从文档:
BeginUpdate 方法暂停屏幕重绘,直到调用 EndUpdate 方法。使用 BeginUpdate 加快处理速度并避免在将项目添加到集合或从集合中删除时闪烁。
更好的做法是使用BeginUpdate
/EndUpdate
来提高速度并避免闪烁。
但使用的主要原因ListView.Clear
是因为使用“高级 VCL 方法”(正如 @Arnaud 评论的那样)总是一个好主意,并且实现可能会改变(顺便说一句,该方法是在 D7 中引入的)。
编辑:我已经测试了TListView
10k项(D7/WinXP):
ListView.Items.Clear
: ~5500 毫秒ListView.Clear
: ~330 毫秒
结论:ListView.Clear
比不使用/ListView.Items.Clear
时快大约 16 倍!BeginUpdate
EndUpdate
于 2012-04-16T07:17:43.250 回答
1
ListView.Clear
是一种在内部调用的便捷方法ListView.Items.Clear
。无论您调用两者中的哪一个,都没有语义差异。
我更喜欢第一个,因为它更短,而且它没有显示我目前不感兴趣的内部表示。
于 2012-04-16T07:13:42.573 回答