0

私のWPFアプリケーションには、顧客を選択するためのルックアップ画面があります。顧客テーブルには、約10,000件のレコードが含まれています。Linqクエリを使用してレコードをロードおよびフィルタリングする場合は非常に遅くなります(レコードの順序付けは行っていません)。速度を上げる方法はありますか?インデックス付きビューの使用について聞いた。誰かアイデアを教えてもらえますか?

lstCustomerData = dbContext.customers.Where(c => c.Status == "Activated").ToList();
            dgCustomers.ItemsSource = lstCustomerData;

フィルタリング:

 string searchKey = TxtCustName.Text.Trim();

            var list = (from c in lstCustomerData
                        where (c.LastName == null ? "" : c.LastName.ToUpper()).Contains(searchKey.ToUpper())
                        select c).ToList();
            if (list != null)
                dgCustomers.ItemsSource = list;
4

1 に答える 1

0

何が遅いかによります。SQL クエリは遅いですか? UI のレンダリングは遅いですか? メモリ内で並べ替え/絞り込みを行っていますか、それとも DB に戻っていますか?

アプリをプロファイリングして、最も遅い部分を正確に特定し、最初にそれに取り組む必要があります。

Status追加した Linq クエリが遅い場合は、データベースの列にインデックスを追加すると役立つ場合があります。

Where句を変更することで、いくつかの改善が得られる場合があります。

var list = (from c in lstCustomerData
            where (c.LastName != null && c.LastName.ToUpper()).Contains(searchKey.ToUpper())
            select c).ToList();
if (list != null)
    dgCustomers.ItemsSource = list; 

空の文字列を比較する必要がないためです。ただし、NULL レコードが非常に少ない場合、これはおそらくあまり役​​に立ちません。

ただし、この場合、すべてのフィルタリングはメモリ内で行われるため、フィルタリングをソース リポジトリに戻さない限り、DB でインデックス付きビューを使用しても役に立ちません。

于 2012-10-26T15:30:56.177 に答える