【问题标题】:Does using Take improve the performance使用 Take 能提高性能吗
【发布时间】:2013-12-19 00:12:42
【问题描述】:

如果我有一个返回一些结果的LINQ to Entities 查询,使用Take 会提高性能吗?我的意思是因为在查询结束时我们说.Take(thisManyRecords) 那么它是否首先返回所有记录然后才返回给我thisManyRecords 或者它真的从一开始就将其搜索限制为thisManyRecords?

【问题讨论】:

  • 我的数据库不够大,所以我可以自己实际测试一下,感受一下不同。
  • 这个在别处有很多介绍,你搜遍了吗? stackoverflow.com/questions/13062462/… ...例如。
  • 双向编写代码。双向运行代码。现在你知道哪个更快了。
  • @EricLippert 好吧,除非你做了一些performance benchmarking mistakes
  • 如果您的数据库不够大,无法运行有意义的性能测试,那么获取更大的数据库。

标签: c# linq linq-to-entities


【解决方案1】:

Linq to entity 意味着 EF 和一些获取查询的提供者。

您不需要检查数据包。 SQL 分析器将显示使用的 SQL 语句。

如果您将.Take 应用于 IQueryable 源。你最终得到一个表达式树,这可以发送到 db ;

Context.Set().Where(t => ??).OrderBy(t => t.??).Take(n);

导致 TOP(n) 被发送。

如果你强制枚举例如 .ToList() 和 did .Take() 那么这适用于内存对象并且不会发送到 DB。

Query Execution in EF explained

【讨论】:

    猜你喜欢
    • 2014-05-19
    • 2013-04-12
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多