Tengo una consulta en mi página que tarda al menos medio segundo en ejecutarse utilizando EF 3.5. Cuando utilicé un procedimiento almacenado, la velocidad fue notoriamente más rápida. Es una consulta muy compleja. ¿Habrá alguna mejora de rendimiento en el próximo EF 4.0? Y EF 4.0 realmente supera 3.5 en rendimiento?¿Cómo es el rendimiento del marco de entidad 4 frente al marco de entidad 3.5?
Respuesta
La respuesta corta es muy temprano para decirlo. Los chicos de .Net se están enfocando casi completamente en el rendimiento hasta que el lanzamiento del 12 de abril tenga que ser finalizado y localizado. Además, ¿qué se entiende por más rápido? Más rápido se puede ver de muchas maneras, por ejemplo:
- Entity Framework 4.0 has new features, las mejoras de seguimiento de objetos por sí solo puede significar grandes ganancias ya que no está haciendo el trabajo manual que usted mismo ... en cualquier caso, al menos la de un desarrollo más rápido .
- Si no funcionó en absoluto, los objetos de peso más liviano con POCOsupport pueden significar que se está moviendo mucha menos memoria al tratar también con muchos objetos. No importa cuán pequeño sea el costo de las propiedades adicionales que se llenan cuando se extraen de la base de datos, hay un costo tanto al crear instancias como al rastrearlas (tiempo de carga y consumo de memoria).
En su caso específico, un medio segundo es mucho tiempopara nada más que una consulta volumen muy compleja o de alto ... ¿has mirado para ver cuánto tiempo se dedica en la base de datos y la cantidad de tiempo se gasta una vez .Net tiene los datos? Si pasa la mayor parte del tiempo fuera de SQL, entonces sí, las mejoras de base en las reflexiones en Net 4.0 deberían proporcionarle alguna mejora en la velocidad ... sin embargo, si pasa todo su tiempo en SQL, no será de mucha ayuda. en absoluto. La mayor parte de su problema de rendimiento puede ser la indexación del SQL generado y no el rendimiento de hidratación de Entity Framework.
Me gustaría seguir el comentario de Kane, mire el SQL que está generando para su consulta, ¿es posible que publique esto y el procedimiento almacenado que es rápido para que podamos encontrar el problema?
De los ADO.NET blog:
Personalización de consultas - Añadir soporte para los operadores LINQ existentes, el reconocimiento de un conjunto más amplio de patrones con LINQ, escribiendo modelo definido funciones junto con la capacidad de utilizar éstos en LINQ y varias formas de crear y personalizar otras consultas.
generación de SQL legibilidad Mejoras - La mejora de la legibilidad , junto con TSQL optimizaciones de rendimiento, de los consultas generadas para que sea mucho más fácil de entender lo que está sucediendo
Así que estos dos puntos implica que podía ver mejoras en la forma en que genera su consulta desde LINQ.
Sin embargo, es poco probable que un ORM sea capaz de superar una consulta que haya escrito desde cero, ya que tiene que atender tantos escenarios diferentes, y por lo general el más común está predeterminado. EF 3.5 parecía producir un SQL de combinación muy eficiente cuando lo usé, probablemente el mejor que he visto en un ORM, por lo que hay esperanzas de que pueda deshacerse del SP en 4.0.
Si tiene un procedimiento almacenado, supongo que es una gran consulta: enviar este texto SQL cada vez al servidor causará mucho tráfico de red, que es otra cosa que puede o no haber considerado. Obviamente, en el mismo servidor o dentro de la misma red interna, esta es una optimización de estilo para "cortar el cabello para perder peso".
Cuando se trata de consultas realmente complejas, no he visto ninguna evidencia de que alguno de L2S, NH o EF pueda generar un mejor plan de consulta que el que puedo en un sproc. Me encanta ORM (especialmente NH), pero todavía hay momentos en que ORM tiempo de ejecución puede ser frenado por un sproc bien escrito.
- 1. Actualizar un procedimiento almacenado en el marco de entidad 3.5
- 2. distintas en el marco Entidad
- 3. Cómo eliminar relaciones del marco de entidad
- 4. Entidad marco POCO
- 5. marco Entidad - conseguir entidad por su nombre
- 6. Marco de entidad: cómo detectar excepciones recuperables frente a irrecuperables
- 7. Entidad marco genérico
- 8. Entidad Proxy Marco
- 9. entidad Código Marco primera actualización del trozo por Entidad
- 10. Marco de la entidad y el problema
- 11. dependencia circular en el marco de entidad
- 12. Ejecutando sql en el marco de entidad?
- 13. Procedimientos almacenados en el marco de entidad
- 14. entidad unidad de marco + repositorio + o pregunta
- 15. Unión en el marco de la entidad
- 16. Entidad marco 4 - mapeo de tipo complejo personalizado
- 17. Entidad marco dinámico donde Cláusula
- 18. tipo complejo en el marco de entidad
- 19. Uso de memoria de marco de entidad
- 20. Patrón de repositorio y marco de entidad
- 21. Marco de la entidad de referencia circular
- 22. Entidad Marco 4 Entity con EntityState of Ungedged disparando actualización
- 23. .NET Diseño del proyecto del marco de la entidad (arquitectura)
- 24. Marco de Entidad Marco de muchos a muchos, clúster frente a índice no agrupado
- 25. Marco de entidad y existe la cláusula
- 26. Marco de la entidad y ACTUALIZAR CASCADA
- 27. entidad Código Marco relaciones de primer nivel
- 28. error Marco de la entidad al presentar los campos vacíos
- 29. Marco de entidad en Arquitecturas estratificadas
- 30. C#, marco de la entidad, incremento automático
En una pregunta lateral, ¿analizó las diferencias en el plan de ejecución entre su procedimiento almacenado y el generado por EF 3.5? – Kane