我听到很多关于延迟加载的性能问题,无论在NHibernate,Linq ….
问题是N 1选择.例如,我想要所有帖子及其用户,在foreach我懒惰加载用户,他们我需要一个选择的帖子,加上每个用户的N选择.
懒惰载入中:
1 – 从发帖中选择….
N – 从用户选择….
“好”的做法是加入:
1 – 从post后连接用户的post.UserId = user.Id中选择…..
但是看到EF生成的sql,我意识到很多数据是浪费的.想像一下,所有帖子都是同一个用户. Inner Join将为每个帖子行带来所有用户列.
在表演中,哪种方式最好?
解决方法
懒惰加载既不好也不坏.看到这个更长的解释:
When should one avoid using NHibernate’s lazy-loading feature?
一般来说,延迟加载是ORM的一个很好的默认行为,但作为一个ORM用户,您需要意识到何时重写默认值并加载数据.分析应用程序的性能是决定使用延迟加载或不使用它的最佳方式.谨防过早优化花费太多精力.