[英]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.