潜在的に数千のアイテム (3000 ~ 5000 と考えてください) がObservableCollection
、いくつかのビジュアル インターフェイスにバインドされた に追加されるセットアップがあります。現在、それらを追加するプロセスは非常に遅く (約 4 秒/1000 項目)、もちろんその間 GUI は応答しません。システムのロックを心配せずに、一度に多くのアイテムをコレクションに移動するのに適した方法は何ですか? 私は見ましたDispatcherTimer
が、必要なものがすべて提供されるかどうかはわかりません。
別の質問 - これらのオブジェクトをコレクションに追加するのにそれほど時間がかからないように、これらのオブジェクトの作成を高速化するためにできることはありますか? 現在、私はそれらを次のように使用しています:Collection.Add(new Item(<params>))
おそらくバックグラウンドスレッドでアイテムを事前に生成すると、アイテムを追加するのにかかる時間が大幅に短縮されますか?
編集: 仮想化はできません。要件はWrapPanel
外観を指定するため、表示は実際にはListBox
テンプレート化された ItemsPanel を持つ です
Edit2: ストップウォッチによると、ボトルネックは実際にアイテムを my に入れていObservableCollection
ます。そのコレクション タイプを変更し、独自の通知を行って、大幅に高速化されるかどうかを確認します。
Edit3:したがって、答えは1か所にあります-から継承するクラスを作成することにより、(以下の助けを借りて)この問題を解決しましたObservableCollection
。このクラスは 2 つのことを行いました。一度にコレクションを追加するメソッドを公開し、CollectionChanged
イベントを抑制する機能を追加しました。これらの変更により、3000 個のアイテムを追加するのにかかる時間は約 0.4 秒です (97% の改善)。このリンクでは、これらの変更の実装について詳しく説明しています。