I would like to know why are there 2 different ways of clearing out a listview. One is by calling listview.clear
and other is listview.items.clear
.
ListView.Clear
is just a wrapper around ListView.Items.Clear
with ListItems.BeginUpdate
/ListItems.EndUpdate
. look at the source:
procedure TCustomListView.Clear;
begin
FListItems.BeginUpdate;
try
FListItems.Clear;
finally
FListItems.EndUpdate;
end;
end;
From the docs:
The BeginUpdate method suspends screen repainting until the EndUpdate method is called. Use BeginUpdate to speed processing and avoid flicker while items are added to or deleted from a collection.
A better practice is to use BeginUpdate
/EndUpdate
for speed and avoiding flicker.
But the main reason to use ListView.Clear
is because using a "high-level VCL methods" (As well commented by @Arnaud) is always a good idea, and the implementation might change (BTW, the method was introduced in D7).
EDIT: I have tested the TListView
with 10k Items (D7/WinXP):
ListView.Items.Clear
: ~5500 msListView.Clear
: ~330 msConclusion: ListView.Clear
is about 16 times faster than ListView.Items.Clear
when BeginUpdate
/EndUpdate
is not used!
ListView.Clear
is a convenience method that calls ListView.Items.Clear
internally. There is no semantic difference no matter which of the two you call.
I prefer the first one because it is shorter and it doesn't show the internal representation which is of no interest for me at this point.