0

コレクション内のアイテムの量: ~100k 列に表示されるフィールドの量: 4-10

問題自体 - コレクションは EntityFramework を使用してデータベースから取得されます。必要なすべてのデータを読み込んで実体化するには、開発用コンピューターで約 10 ~ 12 秒かかります。さらに別の問題として、同じコレクションを複数のコントロールにバインドできるため、それらを個別にフィルター処理する必要があります (= デフォルトのコレクション ビュー フィルターを設定しない)。現在、バインディングを次のように設定しています。

Binding b = new Binding();
b.Source = new CollectionViewSource() { Source = MyLargeCollection }.View;
MyDataGrid.SetBinding(DataGrid.ItemsSourceProperty, b);

新しい CollectionViewSource を作成すると、初期化にかかる時間が大幅に増加します - 数分 (そして、何らかの理由で 100k コレクションを列挙していると思われます)。つまり、設定しただけの場合:

b.Source = MyLargeCollection;

データベースからデータをロードして実体化するには、10 ~ 12 秒しかかかりません。

質問 - 私のコードに何か問題がありますか? そうでない場合、同じ大規模なコレクションを異なるアイテム コントロールにバインドするが、異なるコレクション ビューを使用するための正しいアプローチは何でしょうか?

4

1 に答える 1

1

Linq to Entitiesを使用して、指定されたフィルターを使用してエンティティをロードするだけで、10kレコードのグリッドに関心のあるユーザーがいないため、すべての10kレコードをロードしないようにします。

クエリへのバインドの例:

grid1.DataContext = (from i in context.MyItems
                    where i.MyPropertyToFilter == "myFilter"
                    select i).ToList();

grid2.DataContext = (from i in context.MyItems
                    where i.MyOtherPropertyToFilter == "myOhterFilter"
                    select i).ToList();

このようにして、コントロールに必要なレコードのみをロードします

于 2010-08-09T11:19:48.133 に答える