J'entends beaucoup parler de problèmes de performance sur le chargement paresseux, peu importe si à NHibernate, Linq ....Est-ce que Lazy Loading est vraiment mauvais?
Le problème est N + 1 sélections. Par exemple, je veux tous les messages et ses utilisateurs, à tous les utilisateurs de chargement paresseux, j'ai besoin d'un select pour les messages, plus N select pour chaque utilisateur.
Lazy Chargement:
1-select ....from post
N - approche select ....from user
Le "bon" est faire une jointure:
1-select .....from post inner join user on post.UserId = user.Id
Mais voir EF généré SQL, J'ai réalisé que beaucoup de données étaient gaspillées. Imaginez que tous les messages sont le même utilisateur. Inner Join amènera toutes les colonnes d'utilisateurs pour chaque ligne de publication.
En performance, quelle approche est la meilleure?
C'est une bonne question - comment choisir - mais je pense que la réponse dépendra beaucoup des données.Cependant, je pense que vous seriez surpris que les requêtes multiples soient souvent pires que "les données gaspillées" en retournant plus que nécessaire. En d'autres termes, il y a des cas où le chargement paresseux est bon, mais étonnamment peu dans les applications «typiques». –
Votre réponse dépend également de votre ORM, car dans l'EF, pour utiliser votre exemple, ce ne sont pas les deux seules options. –
@Craig Stuntz Quelles autres options? J'utilise EF4 –