我听到的关于 NHibernate 延迟加载的大部分说法是,使用它比不使用它要好。似乎最小化数据库访问以减少瓶颈是有意义的。但几乎没有什么事情是不需要权衡的,当然它会迫使你有一些限制设计virtual
特性。但我也注意到一些开发人员关闭了某些常用对象的延迟加载。
这让我想知道是否在某些特定情况下使用延迟加载会损害数据访问性能。
所以我想知道,何时以及在什么情况下我应该避免延迟加载 NHibernate 持久对象之一?
延迟加载的缺点仅仅是额外的处理时间,还是 nhibernate 延迟加载也会增加数据访问时间(例如,通过对数据库进行额外的往返)?
Thanks!
从数据库中急切加载对象和延迟加载对象之间存在明显的性能权衡。
如果您使用急切加载,您会在单个查询中吸收大量数据,然后可以将其缓存。这在应用程序启动时最常见。您正在用内存消耗换取数据库往返。
如果使用延迟加载,则在单个查询中吸收最少量的数据,但是任何时候您需要与初始数据相关的更多信息,都需要对数据库进行更多查询,并且数据库性能命中通常是大多数情况下的主要性能瓶颈。应用程序。
因此,一般来说,您总是希望准确检索整个“工作单元“,不多也不少。在某些情况下,您可能并不确切知道自己需要什么(因为用户正在通过向导或类似的东西进行工作),在这种情况下,边做边延迟加载可能是有意义的。
如果您正在使用 ORM 并专注于快速添加功能,稍后会回来优化性能(这是非常常见的,也是一种很好的方法),那么将延迟加载设置为默认值是正确的方法。如果您后来发现(通过性能分析/分析)您有一个查询来获取一个对象,然后有 N 个查询来获取与该原始对象相关的 N 个对象,您可以更改该代码段以使用预先加载来仅命中数据库一次而不是 N+1 次(N+1 问题是使用延迟加载的众所周知的缺点)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)