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. Actually, this extends to many other VCL components too. which method must be used and why?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With