Como ya se ha indicado por Ladislav en el comentario, es necesario deshabilitar la detección de cambios automática para mejorar el rendimiento:
context.Configuration.AutoDetectChangesEnabled = false;
Esta detección de cambios está habilitado de forma predeterminada en la API DbContext
.
La razón por la DbContext
se comporta de manera diferente a la API ObjectContext
es que muchas más funciones de la API DbContext
llamarán DetectChanges
internamente que las funciones de la API ObjectContext
cuando se habilita la detección de cambios automática.
Here puede encontrar una lista de esas funciones que llaman DetectChanges
de forma predeterminada. Ellos son:
- El
Add
, Attach
, Find
, Local
, o Remove
miembros en DbSet
- El
GetValidationErrors
, Entry
, o SaveChanges
miembros en DbContext
- El método
Entries
en DbChangeTracker
Especialmente Add
llama al DetectChanges
que es responsable del bajo rendimiento que experimentó.
I contraste a esto el API ObjectContext
llama DetectChanges
solamente automáticamente en SaveChanges
pero no en AddObject
y los otros métodos correspondientes se mencionó anteriormente. Esa es la razón por la cual el rendimiento predeterminado de ObjectContext
es más rápido.
¿Por qué introdujeron esta detección automática de cambio predeterminada en DbContext
en tantas funciones? No estoy seguro, pero parece que deshabilitarlo y llamar al DetectChanges
manualmente en los puntos correctos se considera advanced and can easily introduce subtle bugs into your application so use [it] with care.
de alguna manera yo creo que la respuesta será similar a esto: http://stackoverflow.com/questions/5917478/what-causes-attach -to-be-slow-in-ef4/5921259 # 5921259 –