我想知道为什么有两种不同的清除列表视图的方法.一个是通过电话listview.clear,另一个是listview.items.clear.实际上,这也扩展到许多其他VCL组件.必须使用哪种方法?为什么?
kob*_*bik 21
ListView.Clear只是周围的包装ListView.Items.Clear带ListItems.BeginUpdate/ ListItems.EndUpdate.看看来源:
procedure TCustomListView.Clear;
begin
FListItems.BeginUpdate;
try
FListItems.Clear;
finally
FListItems.EndUpdate;
end;
end;
Run Code Online (Sandbox Code Playgroud)
来自文档:
BeginUpdate方法暂停屏幕重绘,直到调用EndUpdate方法.使用BeginUpdate加速处理,避免在将项目添加到集合或从集合中删除时闪烁.
更好的做法是使用BeginUpdate/ EndUpdate获得速度并避免闪烁.
但使用的主要原因ListView.Clear是因为使用"高级VCL方法"(由@Arnaud评论)总是一个好主意,并且实现可能会改变(BTW,该方法在D7中引入).
编辑:我已经测试了TListView用10K项目(D7/WinXP中):
ListView.Items.Clear:~5500毫秒ListView.Clear:~330毫秒结论:ListView.Clear比ListView.Items.Clear使用BeginUpdate/ EndUpdate不使用快约16倍!
| 归档时间: |
|
| 查看次数: |
3432 次 |
| 最近记录: |