2011-07-19 7 views
5

En un proyecto con alrededor de 350 entidades en el modelo de entidad EDMX, mi equipo está experimentando largas esperas cuando ocurre la primera consulta y cuando ocurre la primera operación de guardar.¿Cómo mejorar el rendimiento de inicio del modelo grande de Entity Framework 4.0?

Al perfilar un caso simple que ejecuta algunas consultas y guarda, un simple conjunto de pasos solo para iniciar una consulta y guardar toma unos minutos.

La primera consulta toma el 47% del tiempo total solo la llamada a ese método de marco que ejecuta la consulta.

El primer guardado requiere el 50% del tiempo total solo en System.Data.Objects.ObjectContext.SaveChanges.

¿Hay alguna buena opción para mejorar el rendimiento? Esto puede reducir el tiempo de desarrollo.

(Una vez que el sistema realiza la producción, es molesto en el arranque, pero no es un problema durante la ejecución en curso)

Respuesta

6

Cuando se utiliza el contexto para la primera vez que se genera el modelo de asignación definida en los metadatos. La opción es pregenerate this model e incluye archivos pregenerados en su aplicación (pero debe regenerarlo cada vez que modifique su EDMX).

Un modelo tan grande se debe dividir probablemente en varios modelos más pequeños. Apenas creo que 350 entidades formen un solo dominio que no se pueda dividir.

+0

Gracias! Funcionó bien Terminé usando la generación de plantilla T4 methoed vinculada en el artículo al que hizo referencia. Redujo mi consulta inicial ejecutada a menos del 5% del tiempo original y el guardado inicial de manera similar. El costo de tiempo se desplaza a guardar el EDMX, pero como se trata de una operación menos frecuente, se ahorra un tiempo de desarrollo significativo durante las ejecuciones de depuración. http://blogs.msdn.com/b/adonet/archive/2008/06/20/how-to-use-a-t4-template-for-view-generation.aspx – BrianCooksey

+0

Se entiende su punto sobre la división de modelos y apreciado. Curiosamente, anteriormente teníamos modelos separados, pero terminamos concluyendo que un modelo unificado aliviaría algunos desafíos que los modelos separados habían introducido y que, para este sistema, las ventajas superaban a los otros problemas. – BrianCooksey

1

Un único EDMX grande dará como resultado un ObjectContext grande. cada vez que haga using(var ctx = new YourObjectContext()) va a construir un objeto grande, inicializar muchas colecciones (probablemente 350 de ellas) y hará que las operaciones de su base de datos sean intensivas en la CPU. Ciertamente alcanzarás desafíos de rendimiento cuando obtienes un gran volumen de tráfico.

Sugeriría dividir el WDMX grande en un EDMX más pequeño y producir diferentes ObjectContexts. Debe poner un número pequeño de entidades lógicamente agrupadas en un ObjectContext.

Cuestiones relacionadas