渴望加载比使用NHibernate的延迟加载慢

时间:2012-05-30 10:15:26

标签: c# nhibernate orm

我有一个像这样的对象结构:Box有很多Item有很多Ingredient。当我调用某个方法时,必须填充所有集合以执行该任务。我认为在这种情况下热切地加载集合会更好,但是在我的测试中,它可以更快地加载它们。 Box约有Item,而Ingredient约有400 {{1}}。

为什么在必须填充所有集合时,加速NHibernate(3.3)的加载速度会慢?

3 个答案:

答案 0 :(得分:2)

有几个变量可以通过改变不同的获取模式的工作方式来影响性能。如果你连接一起取出所有东西,可以考虑行的返回数字是nBoxes * nItemsPerBox * nIngredientsPerItem。

你的意思是单个项目有400种成分吗?如果是这样,对于单个框,将是1 * 200 * 400 = 80000行。在此,盒子信息将重复80000次,每个项目将重复400次。要传输的大量数据。

如果在NHibernate中启用SQL日志记录,涉及的实际查询是什么?

答案 1 :(得分:1)

您是否确实知道,对于每个盒子,物品属性都被访问,而每个物品又可以访问成分属性? 否则,您不会使用延迟加载检索相同数量的数据。

答案 2 :(得分:0)

因为它必须加载表和子表中的所有行。不幸的是,Hibernate并不总是以最聪明的方式做到这一点。您可以使用自定义查询来更有效地加载数据。但你必须问这个问题,你真的想要所有这些行吗?