Ответ 1
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) всегда является хорошей идеей, и реализация может измениться (BTW, метод был введен в D7).
EDIT: Я тестировал TListView
с 10k Элементами (D7/WinXP):
-
ListView.Items.Clear
: ~ 5500 мс -
ListView.Clear
: ~ 330 мс
Заключение: ListView.Clear
примерно в 16 раз быстрее, чем ListView.Items.Clear
, когда BeginUpdate
/EndUpdate
не используется!