【问题标题】:Does a function call in the Where(...) clause of a Linq to Nhibernate query negatively affect performance?Linq to Nhibernate 查询的 Where(...) 子句中的函数调用是否会对性能产生负面影响?
【发布时间】:2010-12-18 01:20:52
【问题描述】:

我在我正在构建的应用程序中使用 linq 休眠和 IQueryable.Where 函数。让我感到困惑的是,我创建并传递给 INhibernateQueryable 的 Where 函数的 Expressions 是如何影响性能的。

我不太确定在编写这些查询表达式时应该避免哪些问题,就性能而言。如果我通过如下函数调用传入一个表达式:

CurrentSession.Linq<ENTITY>().Where(x => x.IsBuyOrder && CheckVariousProperties(x))

它是否会检索每条记录where IsBuyOrder = true,然后在延迟执行不再延迟后立即对其调用函数CheckVariousProperties

函数调用如何影响 LinqToNhibernate 性能?

在 LINQ to Nhibernate 查询表达式中应该避免哪些事情?

【问题讨论】:

  • 我认为编写一个快速测试来验证这一点更容易。
  • 嗯,这可能是真的,我可能会这样做,但我想看看有没有详细知识的人可以解释一些需要注意的事情。

标签: linq performance nhibernate linq-to-nhibernate linq-expressions


【解决方案1】:

我会从查询部分中删除CheckVariousProperties(x),并将其应用于查询的返回结果。

var myresult= [object].Where(x => x.IsUBuyOrder);
var checkedResult = myresult.Where(x => CheckVariousProperties(x));

【讨论】:

  • 感谢您的回复,您是说这会表现得更好吗?为什么?
  • 我相信这不会改变任何事情,因为我认为查询是合并的 - 除非您在第一个查询中调用 ToList()。
  • 我什至不确定将它们组合起来是否可行-它是否必须先返回数据,然后执行 CheckVariousProperties?
【解决方案2】:

最好的办法是使用NHibernate Profiler 来分析您的应用程序。它将能够帮助您确定最大的瓶颈。

【讨论】:

  • 谢谢,也许我会用它。不过我想知道,知道 linq to nhibernate 如何处理表达式中的函数调用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多