2017-01-16 2 views
0

ObservableCollection、(私が理解される)たびにアイテムがコレクションに追加表示、またはその代わりに、単純なListコレクションを使用し、すべての要素が既に追加されている全てのビューをリフレッシュリフレッシュを使用するには、パフォーマンスの違いはありますか?リストまたはObservableCollection?

とでも可能上記の非難としてListとシナリオのですか?これを実装する方法は?

私のItemsControlが遅いので、私は聞いてるのよ、簡単な代わりに、リストのObservableCollectionを使用する方が良いでしょうかしら。実際にすべての要素が既にコレクションに追加されているときに、一度に1回のみビューを更新する必要があります。

答えて

1

ObservableCollection<T>List<T>と同じようにIList<T>を実装しています。主な違いはもちろん、WPFがバインドできるようにするINotifyCollectionChancedを実装していることです。 ObservableCollection<T>

は、UIへの各変更は、リフレッシュすることができます後にイベントをスローします。連続して多くのアイテムを追加している場合、パフォーマンスにいくらか影響を与える可能性があります。あなたはコンストラクタウィッヒを使用して、これはかなり簡単なテストすることができますリストを取ります。

var originalList = new List<SomeClass>(); 

foreach ([..]) 
{ 
    originalList.Add(someInstance); 
} 

ObservableCollection<SomeClass> uiCollection = new ObservableCollection<SomeClass>(originalList); 

あなたがあなたのオブジェクトの複雑なリストを作成することができますし、その終了後に、あなたが上に結合することのうちのObservableCollectionを作成することができますこの方法UI。

1

実行時にアイテムを動的に追加または削除する予定がない場合は、ObservableCollection<T>の代わりにList<T>を使用することもできます。パフォーマンスの差はごくわずかです。

ObservableCollection<T>についての特別なことは、それがINotifyCollectionChangedインタフェースを実装していることである:https://msdn.microsoft.com/en-us/library/system.collections.specialized.inotifycollectionchanged(v=vs.110).aspx

WPFは、コレクションの変更をリッスンするために、このインタフェースを実装する任意のコレクションのCollectionChangedイベントにサブスクライブします。したがって、何らかの理由で変更通知をサポートする独自のカスタムコレクションを作成したい場合は、このインターフェイスを実装するクラスを作成できます。

私は強くあなたのパフォーマンスの問題は、あなたがが使用されているソースコレクションの種類に関係していることを疑います。あなたはUIの仮想化が有効になっていることを確認し、WPFのコントロールのパフォーマンスを向上させる方法の提案を以下のリストの谷に行く必要があります。https://msdn.microsoft.com/en-us/library/cc716879(v=vs.110).aspx

関連する問題