预先加载比使用 NHibernate 延迟加载慢
本文关键字:NHibernate 延迟加载 加载 | 更新日期: 2023-09-27 18:35:56
>我有一个这样的对象结构:Box
有很多Item
有很多Ingredient
。当我调用某个方法时,必须填充所有集合才能执行任务。我认为在这种情况下最好急切地加载集合,但在我的测试中,延迟加载它们的速度最小。一个Box
大约有 200 个Item
而后者又有大约 400 个Ingredient
.
当必须填充所有集合时,为什么使用 NHibernate (3.3) 的预先加载速度较慢?
有几个变量可以通过改变不同抓取模式的工作方式来影响性能。如果您要一次性加入获取所有内容,请考虑行的返回数将是 nBox * nItemsPerBox * nIngredientsPerItem。
你的意思是一件物品有 400 种成分吗?如果是这样,对于单个框,这将是 1 * 200 * 400 = 80000 行。在这种情况下,框信息将重复 80000 次,每个项目将重复 400 次。要传输大量数据。
如果在 NHibernate 中打开 SQL 日志记录,实际涉及哪些查询?
你真的确定,对于每个盒子,访问项目属性,反过来,每个项目,成分属性被访问?
否则,您不会通过延迟加载检索相同数量的数据。
因为它必须加载表和子表中的所有行。不幸的是,Hibernate并不总是以最聪明的方式做到这一点。您可以使用自定义查询来更有效地加载数据。但你必须问一个问题,你真的想要所有这些行吗?