Escuché mucho sobre los problemas de rendimiento sobre la carga diferida, sin importar si en NHibernate, Linq ....¿La carga lenta es realmente mala?
El problema es N + 1 selecciona. Por ejemplo, quiero todas las publicaciones y sus usuarios, en foreach I lazy Load Users, los necesito. Necesito uno para las publicaciones, más N para cada usuario.
Lazy Loading:
1 - select ....from post
N - select ....from user
El enfoque de "bueno" es hacer una combinación:
1 - select .....from post inner join user on post.UserId = user.Id
Pero al ver generó EF SQL, Me di cuenta de que se desperdicia una gran cantidad de datos. Imagine que todas las publicaciones son del mismo usuario. Inner Join traerá todas las columnas de usuarios para cada fila de publicaciones.
En rendimiento, ¿qué enfoque es el mejor?
Esta es una buena pregunta: cómo elegir, pero creo que la respuesta dependerá en gran medida de los datos.Sin embargo, creo que te sorprendería que las consultas múltiples a menudo sean peores que "desperdiciar datos" al devolver más de lo que necesitas. En otras palabras, hay casos en los que la carga diferida es buena, pero sorprendentemente pocos en aplicaciones "típicas". –
Su respuesta también depende de su ORM, porque en el EF, para usar su ejemplo, estas no son las dos únicas opciones. –
@Craig Stuntz ¿Qué otras opciones? Estoy usando EF4 –