【问题标题】:NHibernate performance: Session.Criteria vs LINQ in-memoryNHibernate 性能:Session.Criteria vs LINQ in-memory
【发布时间】:2011-01-17 21:30:17
【问题描述】:

当需要根据复杂标准的数据集时,什么会产生最佳性能?有两种选择:创建一个复杂的 ICriteria 或 Session.Linq 语句,或者使用根对象的 LINQ 并让 NHibernate 处理延迟加载。

选项 1(使用会话):

var result = Session.Linq<Contractor>().Where(contractor => contractor.account == "bla@account.com)
//....
.Where(condition => condition.Orders.Any(condition))
//... more conditions

选项 2(使用根对象进行“内存中”查询,这可能意味着将从 SQL Server 中提取大型结果集):

var contractor = Session.Linq<Contractor>().Single(c => c.Id == 1);

contractor.Orders.SelectMany(o => o.NestedCollection)
.Where(c => c.List.Any(condition))
.Where(//..... more complex filtering;

in-memory 变体不会在 NHPRof 中生成警告,但是 Session 变体会生成警告,即过多的连接可能会降低性能。

【问题讨论】:

    标签: c# linq nhibernate


    【解决方案1】:

    视情况而定,但通常最好让数据库完成其工作并急切地获取您知道自己需要的内容。 fetching multiple associations 是一个例外。

    【讨论】:

      猜你喜欢
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 2011-01-12
      • 1970-01-01
      相关资源
      最近更新 更多