繁体   English   中英

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

[英]Eager loading is slower than lazy loading with NHibernate

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

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

有几个变量可以通过改变不同的获取模式的工作方式来影响性能。 如果您一次性连接获取所有内容,请考虑返回的行数将为nBoxes * nItemsPerBox * nIngredientsPerItem。

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

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

你真的确定,每个盒子都可以访问items属性,而对于每个项目,访问成分属性?
否则,您不会使用延迟加载检索相同数量的数据。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM