如何优化linq查询速度?

时间:2012-12-13 11:19:34

标签: c# wpf linq

我有一个linq查询,它将客户表中的所有记录提取到一个可观察的集合,如下所示:

customerList = new ObservableCollection<customer>(dbContext.customers);
dgRecords1.ItemsSource = customerList;

列表绑定到数据网格。 customer表包含近百个字段。但是我只在数据网格上显示了几个字段。我的问题是

  

是否使用linq查询仅从数据库中引入选定字段可以提高客户屏幕的速度?

我需要过滤并有时删除此列表中的记录。

哪个是选择几个字段到可观察集合的最佳方法,有人可以提供一些示例linq查询吗?

2 个答案:

答案 0 :(得分:8)

优化速度的提示:

  • 减少列减少了所需的带宽
  • 减少行数,但引入分页,减少带宽更多(通常)
  • 关闭变更跟踪和身份管理(例如LINQ-to-SQL中的ObjectTrackingEnabled)将减少后处理数据的开销
  • 使用预编译查询有时可以帮助减少预处理开销

...但是坦率地说,当我们遇到这个问题时,我们通过写“小巧玲珑”并且老去学校“一劳永逸地”解决了这个问题:

var list = connection.Query<CustomerViewModel>(
    "select {some specific cols} from Customers").ToList();

其中CustomerViewModel是一个与LINQ等无关的简单POCO类型,它只具有所需的值,例如:

class CustomerViewModel {
   public int Id {get;set;}
   public string Name {get;set;}
   // ...
}

这会减少所有不必要的开销,并且只是在您想要显示数据时非常理想;此外,参数化和实现层非常优化(使用策略缓存,以获得最佳性能)。

答案 1 :(得分:4)

如果您只选择所需的列而不是所有列,则性能会有所提高。您可以使用StopWatch来实际计算差异。最好只从数据库中选择所需的列,而不是所有列。

您可以考虑的另一件事是使用SkipTake实施分页。您可能会看到:LINQ TO SQL GridView (Enhanced Gridview)