我的WPF应用程序有一个用于选择客户的查找屏幕。 customer表包含近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;
答案 0 :(得分:0)
取决于什么是慢。 SQL查询速度慢吗? UI渲染速度慢吗?你在内存中排序/查找还是回到数据库?
你应该剖析你的应用程序,找出最慢的部分,然后再解决这个问题。
如果您添加的Linq查询速度很慢,那么向数据库中的Status
列添加索引可能会有所帮助。
您可以通过更改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中的索引视图将无济于事。