我有一个像这样的对象结构:Box
有很多Item
有很多Ingredient
。当我调用某个方法时,必须填充所有集合以执行该任务。我认为在这种情况下热切地加载集合会更好,但是在我的测试中,它可以更快地加载它们。 Box
约有Item
,而Ingredient
约有400 {{1}}。
为什么在必须填充所有集合时,加速NHibernate(3.3)的加载速度会慢?
答案 0 :(得分:2)
有几个变量可以通过改变不同的获取模式的工作方式来影响性能。如果你连接一起取出所有东西,可以考虑行的返回数字是nBoxes * nItemsPerBox * nIngredientsPerItem。
你的意思是单个项目有400种成分吗?如果是这样,对于单个框,将是1 * 200 * 400 = 80000行。在此,盒子信息将重复80000次,每个项目将重复400次。要传输的大量数据。
如果在NHibernate中启用SQL日志记录,涉及的实际查询是什么?
答案 1 :(得分:1)
您是否确实知道,对于每个盒子,物品属性都被访问,而每个物品又可以访问成分属性? 否则,您不会使用延迟加载检索相同数量的数据。
答案 2 :(得分:0)
因为它必须加载表和子表中的所有行。不幸的是,Hibernate并不总是以最聪明的方式做到这一点。您可以使用自定义查询来更有效地加载数据。但你必须问这个问题,你真的想要所有这些行吗?