14

リストビューをクリアする方法が 2 つある理由を知りたいです。1 つは電話によるものでlistview.clear、もう 1 つは ですlistview.items.clear。実際、これは他の多くの VCL コンポーネントにも当てはまります。どの方法を使用する必要があり、その理由は?

4

2 に答える 2

22

ListView.Clear/ListView.Items.Clearの単なるラッパーです。ソースを見てください:ListItems.BeginUpdateListItems.EndUpdate

procedure TCustomListView.Clear;
begin
  FListItems.BeginUpdate;
  try
    FListItems.Clear;
  finally
    FListItems.EndUpdate;
  end;
end;

ドキュメントから:

BeginUpdate メソッドは、EndUpdate メソッドが呼び出されるまで、画面の再描画を中断します。BeginUpdate を使用して処理を高速化し、アイテムがコレクションに追加またはコレクションから削除される際のちらつきを回避します。

速度とちらつきを避けるためにBeginUpdate/を使用することをお勧めします。 しかし、使用する主な理由は、「高レベルの VCL メソッド」(@Arnaud によってコメントされている) を使用することは常に良い考えであり、実装が変更される可能性があるためです (ところで、メソッドは D7 で導入されました)。EndUpdate
ListView.Clear


編集: 10kアイテム (D7/WinXP)でテストしましたTListView:

  • ListView.Items.Clear: ~5500ミリ秒
  • ListView.Clear: ~330ミリ秒

結論:/を使わない場合にListView.Clear比べて約16倍速い!ListView.Items.ClearBeginUpdateEndUpdate

于 2012-04-16T07:17:43.250 に答える
1

ListView.ClearListView.Items.Clear内部で呼び出す便利なメソッドです。どちらを呼び出しても意味的な違いはありません。

最初のものの方が短く、現時点では興味のない内部表現が表示されないため、私は最初のものを好みます。

于 2012-04-16T07:13:42.573 に答える