懒惰加载真的很糟糕吗?

Fel*_*oto 12 sql linq nhibernate entity-framework lazy-loading

我听说很多关于延迟加载的性能问题,无论是在NHibernate,Linq ....

问题是N + 1选择.例如,我想要所有帖子及其用户,在foreach我懒惰加载用户,他们需要一个选择帖子,加上N选择每个用户.

延迟加载:

1 - select ....from post
N -select ....from user

"好"的方法是加入:

1 - select .....from post inner join user on post.UserId = user.Id

但是看到EF生成SQL,我意识到浪费了很多数据.想象一下,所有帖子都是同一个用户.内部联接将为每个帖子行带来所有用户列.

在性能方面,哪种方法最好?

Mic*_*dox 13

懒惰装载既不好也不坏.有关更长时间的解释,请参阅此处:

什么时候应该避免使用NHibernate的延迟加载功能?

通常,延迟加载是ORM的一个很好的默认行为,但作为ORM用户,您需要注意何时要急切覆盖默认值和加载数据.分析应用程序的性能是决定使用延迟加载或不使用延迟加载的最佳方法.警惕在过早优化上花费太多精力.


Ran*_*der 5

延迟加载的问题在于知道它是什么以及何时会咬你。您需要知道可以对数据库进行多少次潜在的旅行,以及如何解决该问题。我不认为LL不好。我只需要了解它的后果。