14

He estado buscando benchmarks de rendimiento recientes que comparen L2S y EF y no pude encontrar ninguno que probara procedimientos almacenados de llamadas utilizando la versión de lanzamiento de EF. Entonces, realicé algunas de mis pruebas y encontré algunos resultados interesantes.Linq to Sql vs Entity Framework Performance

¿Estos resultados se ven bien? ¿Debería probarlo de otra manera?

Una instancia del contexto, una llamada del procedimiento almacenado: (enlace no válido)

Una instancia del contexto, varias llamadas de la misma sproc: (enlace no válido)

Varias instancias de el contexto, llamadas múltiples del mismo sproc: (enlace muerto)

+0

¿Qué pasa cuando se pone sus líneas de creación de contexto en un usando() bloquean? Esas llamadas de mayor duración pueden deberse a que el sistema no tiene una conexión en el grupo ...? –

+2

Es posible que también desee realizar una evaluación comparativa de la actualización, eliminar e insertar el rendimiento. – DamienG

+0

¿Su código de datos por lo general se ve así? De alguna manera, no parece ser un código de acceso a datos real ... La prueba de bucles no tiene nada en común con los patrones reales de acceso a datos. –

Respuesta

7

Creo que debería probarlo de una manera algo diferente, para distinguir startup costs vs. execution costs. El Marco de la Entidad, en particular, tiene sustancial startup costs resulting from the need to compile database views (aunque puede hacerlo de antemano). Del mismo modo, LINQ tiene una noción de compiled query, que sería apropiado si se ejecuta una consulta varias veces.

Para muchas aplicaciones, los costos de ejecución de consultas serán más importantes que los costos de inicio. Para algunos, lo opuesto puede ser cierto. Dado que las características de rendimiento de estos son diferentes, creo que es importante distinguirlos. En particular, promediando los costos de inicio en el costo promedio de una consulta ejecutada repetidamente es engañoso.

+0

Pero ¿no reflejarían estos resultados cómo funcionarían las cosas en una aplicación asp.net? Como no puedo mantener realmente una instancia del contexto 'vivo', tengo que hacer una nueva en cada solicitud y llamar al procedimiento almacenado. – Vyrotek

+0

No, no necesariamente.Puede precompilar las vistas de Entity Framework, en cuyo caso no paga ese costo al crear instancias de un contexto. Incluso para las cosas que no se pueden precompilar, el seguimiento de estos elementos por separado aclara la diferencia entre una solicitud que hace una consulta y otra que hace 100. –

2

Hice un par de páginas asp.net de prueba para ver cuál funciona mejor. Mi prueba fue:

Eliminar 10.000 registros Inserte 10.000 registros Editar 10.000 registros databind los 10.000 registros a un GridView y la visualización de la página

que estaba esperando LinqToSql para ser más rápido, pero haciendo la LinqToSql anterior tiene casi 2 minutos, mientras que LinqToEntities toma menos de 20 segundos.

Al menos para esta prueba, parece que LinqToEntities es más rápido. Mis resultados parecen coincidir con los tuyos también.

No intenté Insertar/Editar/Eliminar/Mostrar más de 1 tabla unida.

Estoy interesado en saber más ... o si mi prueba no es válida, me gustaría ver algunas pruebas reales.

+1

Entiendo que esta es una publicación anterior, pero si todavía está interesado, he hecho algunos pruebas con EF que están disponibles aquí (http://blog.staticvoid.co.nz/2012/03/entity-framework-comparative.html). encontré L2S mucho más lento en las actualizaciones, pero me encantaría saber por qué (y si hay una manera de mejorarlo). L2S fue mucho más rápido en Selects aunque –

+0

Buen trabajo. Estoy lejos de ser un experto en bases de datos y ORM, pero me gusta lo que mostraron sus pruebas. Recientemente también leí un artículo del equipo de ADO.net sobre las mejoras de EF5: http://blogs.msdn.com/b/adonet/archive/2012/02/14/sneak-preview-entity-framework-5-0- performance-improvements.aspx – dtc

+0

gracias, sí, el equipo de EF ha estado haciendo algunas cosas realmente geniales últimamente sobre el rendimiento, curiosamente, la mayor parte parece haberse hecho dentro de dot net 4.5, no en los binarios EF, lo cual es genial ya que da un montón de diferentes técnicos un impulso. –

Cuestiones relacionadas