c# - 如何优化 linq 查询的速度?

标签 c# wpf linq

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

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

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

whether bringing of only selected fields from the database using linq query increase the speed the customer screen?

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

将少数字段选择到可观察集合中的最佳方法是什么,有人可以提供一些示例 linq 查询吗?

最佳答案

优化速度的提示:

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

...但坦率地说,当我们遇到这个问题时,我们通过编写“dapper”并采用老派的方式“一劳永逸”地解决了它:

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;}
   // ...
}

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

关于c# - 如何优化 linq 查询的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13858731/

相关文章:

c# - WPF 使用 DataBinding 根据其值设置标签背景

c# - 在 System.Windows.UIElement 中包装来自 System.Windows.Forms 的控件

c# - 使用 Htmlagilitypack + LINQ + Lambda 提取表

c# - 如何使用 LINQ to SQL 和 C# 进行正确的连接?

c# - 为什么不能使用反射获取局部变量名?

c# - GC.AddMemoryPressure() 不足以按时触发 Finalizer 队列执行

WPF - 在 UserControl 中托管内容

c# - FK 上的 Linq 值不能为空

c# - 从后台操作导航

c# - 如何将 c# 时区 id 转换为 python 可接受的 id?