2010-01-15 19 views
7

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?

+1

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

Respuesta

3

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?

1

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".

0

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.

Cuestiones relacionadas