2009-06-17 21 views
5

このarticleと観測可能なコレクションがWPFのリスト<>コレクションよりもはるかに高速(20msと1685ms、つまり800倍高速)バインドする理由を知りたいと思います。私はのObservableCollectionの内部を見て、だから何がここで起こっているの ObservableCollectionデータバインディングのパフォーマンス

public Collection() 
{ 
    this.items = new List<T>(); 
} 

それはストレージコレクションオブジェクトは、(私は反射板を使用し、コンストラクタでこれを見た)だとして、それはリストを使用していますか?

答えて

8

その記事の比較は2つの単純なバインド操作の間ではありませんが、それらの測定値は、すでにList<T>またはObservableCollection<T>のいずれかにバインドされているWPF ListBoxに単一の項目を追加するシナリオを参照してください。著者の発言として

は:

... CLR List<T>オブジェクト は、自動的に コレクション変更イベントを発生しません。 するために 変更をピックアップする ListBoxを取得し、あなたは従業員の リストを再作成し、それが ListBoxItemsSourceプロパティに に再接続する必要があります。このソリューションは機能しますが、 はパフォーマンスに大きな影響を与えます。あなたは新しいオブジェクトに ListBoxItemsSource を再割り当て たびに、 ListBox最初はその前の アイテムを捨て、そのリスト全体を再生成します。

これは、パフォーマンスの違いを説明しています。 ObservableCollection<T>にはList<T>が付いていますが、INotifyCollectionChangedインターフェイスが実装されており、余分な処理が不要になります。

+2

より正確には、ObservableCollectionによってINotifyCollectionChangedが実装されています。

+0

ありがとう、ブライス修正済みです。 –

+0

リストが1000個、ObservableCollection 個が1000個のアイテムがあれば、同じ時間がかかるでしょうか?それは理にかなっている。 – Jose

関連する問題