EF6 / Code First: Super lento durante la primera consulta, pero solo en Debug

entity-framework entity-framework-6 visual-studio-2013

Pregunta

Estoy usando EF6 rc1 con la estrategia Code First, sin vistas precompiladas y el problema es: si compilo y ejecuto la aplicación exe, se necesitan 15 segundos para ejecutar la primera consulta (está bien, ya que todavía estoy trabajando en el pre - Vistas generadas). Pero si uso la vista previa de Visual Studio 2013 para depurar la misma aplicación, demora casi 2 minutos ANTES de ejecutar la primera consulta:

Dim Context = New MyEntities()
Dim Query = From I in Context.Itens '' <--- The debug takes 2 minutes in here
Dim Item = Query.FirstOrDefault()

¿Hay alguna manera de eliminar este tiempo extra? ¿Estoy haciendo algo mal aquí?

Ps .: El contexto en sí no es complicado, simplemente está lleno con más de 200 tablas.

Editar: Descubrió que el problema es que durante el tiempo de depuración, el EF parece estar generando las Vistas, ignorando las generadas previamente. Usando el código fuente de EF, descubrí que la propiedad:

Dim Context = New MyEntities()
Dim Query = From I in Context.Itens '' <--- The debug takes 2 minutes in here
Dim Item = Query.FirstOrDefault()

Es donde se consume el tiempo. Pero esto es extraño ya que solo lleva tiempo en la depuración. ¿Me estoy perdiendo de algo?

Edit: Encontré más información relacionada con la pregunta: Usando el Process Monitor (por Sysinternals), descubrí que ahí está el proceso 'desenv.exe' que consume mucho tiempo. Para ser más específico su tiempo de consumo con un 'Thread Exit'. Repite la pila Thread Exit 36 ​​veces. No sé si esta información es muy útil, pero guardé un '.cvs' con la pila, aquí está su cuerpo: [...] (edición: eliminado el cuerpo de '.cvs', puedo publicarlo de nuevo por los comentarios si alguien realmente piensa que va a ser útil, pero era confuso y demasiado grande.)

Editar: Instalar VS2013 Ultimate y Entity Framework 6 RTM. Instalé Entity Framework Power Tools Beta 4 y lo usé para generar las Vistas. Nada cambió ... Si ejecuto el archivo ejecutable, demora 20 segundos, si inicio la depuración, demora 120 segundos.

Edición: creó un pequeño proyecto para simular el error: http://sdrv.ms/16pH9Vm Simplemente ejecute el proyecto dentro del entorno y directamente a través del archivo .exe, haga clic en el botón y compare el tiempo de carga.

Respuesta aceptada

Este es un problema de rendimiento conocido en Lazy (que EF está utilizando) cuando el depurador está conectado. Actualmente estamos trabajando en una solución (el enfoque actual que estamos considerando es eliminar el uso de Lazy). Esperamos enviar esta revisión en un lanzamiento de parche pronto. Puede seguir el progreso de este problema en nuestro sitio de CodePlex: http://entityframework.codeplex.com/workitem/1778 .

Más detalles sobre la próxima versión del parche 6.0.2 que incluirá una solución aquí: http://blogs.msdn.com/b/adonet/archive/2013/10/31/ef6-performance-issues.aspx




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué