What exactly is the difference between and .items.clear in delphi 7?

后端 未结 2 788
南方客
南方客 2021-01-08 01:22

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.

2条回答
  •  悲哀的现实
    2021-01-08 01:43

    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 ms
    • ListView.Clear: ~330 ms

    Conclusion: ListView.Clear is about 16 times faster than ListView.Items.Clear when BeginUpdate/EndUpdate is not used!

提交回复
热议问题