Mar*_*ers 8 nhibernate performance orm lazy-loading
我听说NHibernate的延迟加载的大部分内容是使用它比使用它更好.似乎最小化数据库访问是有意义的,以减少瓶颈.但很少有事情没有权衡,当然它会通过强迫你拥有virtual
属性来略微限制设计.但我也注意到一些开发人员在某些经常使用的对象上关闭了延迟加载.
这让我想知道是否存在使用延迟加载会损害数据访问性能的某些确定情况.
所以我想知道,何时以及在什么情况下我应该避免延迟加载我的一个NHibernate持久化对象?
仅在额外的处理时间内延迟加载的缺点是,还是nhibernate延迟加载也会增加数据访问时间(例如,通过额外的往返数据库)?
谢谢!
Mic*_*dox 20
数据库中的eager和lazy加载对象之间存在明显的性能折衷.
如果使用预先加载,则在单个查询中吸取大量数据,然后可以缓存.这在应用程序启动时最常见.您正在交换数据库往返的内存消耗.
如果使用延迟加载,则在单个查询中吸收最少量的数据,但是每当您需要与该初始数据相关的更多信息时,它需要对数据库进行更多查询,并且数据库性能命中通常是大多数情况下的主要性能瓶颈.应用.
因此,一般来说,您总是希望准确地检索整个" 工作单元 "所需的数据,不多也不少.在某些情况下,您可能无法确切地知道您需要什么(因为用户正在通过向导或类似工具),在这种情况下,您可能会在延迟加载时使用它.
如果您正在使用ORM并专注于快速添加功能,并且会在以后返回并优化性能(这是非常常见并且是一种很好的方式),延迟加载是默认的正确方法.如果您稍后发现(通过性能分析/分析)您有一个查询来获取一个对象然后N个查询来获取与该原始对象相关的N个对象,您可以更改该段代码以使用预先加载来仅触及数据库一次而不是N + 1次(N + 1问题是使用延迟加载的众所周知的缺点).
归档时间: |
|
查看次数: |
5058 次 |
最近记录: |