リストビューをクリアする方法が 2 つある理由を知りたいです。1 つは電話によるものでlistview.clear、もう 1 つは ですlistview.items.clear。実際、これは他の多くの VCL コンポーネントにも当てはまります。どの方法を使用する必要があり、その理由は?
2 に答える
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 で導入されました)。EndUpdateListView.Clear
編集: 10kアイテム (D7/WinXP)でテストしましたTListView:
ListView.Items.Clear: ~5500ミリ秒ListView.Clear: ~330ミリ秒
結論:/を使わない場合にListView.Clear比べて約16倍速い!ListView.Items.ClearBeginUpdateEndUpdate
ListView.ClearListView.Items.Clear内部で呼び出す便利なメソッドです。どちらを呼び出しても意味的な違いはありません。
最初のものの方が短く、現時点では興味のない内部表現が表示されないため、私は最初のものを好みます。