Como ya lo indicó Ladislav en el comentario, debe deshabilitar la detección automática de cambios para mejorar el rendimiento:
context.Configuration.AutoDetectChangesEnabled = false;
Esta detección de cambios está habilitada de forma predeterminada en la DbContextAPI.
La razón por la que se DbContextcomporta de manera tan diferente de la ObjectContextAPI es que muchas más funciones de la DbContextAPI llamarán DetectChangesinternamente que funciones de la ObjectContextAPI cuando la detección automática de cambios está habilitada.
Aquí puede encontrar una lista de las funciones que llaman DetectChangespor defecto. Son:
- Los
Add, Attach, Find, Local, o Removemiembros deDbSet
- Los
GetValidationErrors, Entry, o SaveChangesmiembros deDbContext
- El
Entriesmétodo enDbChangeTracker
Especialmente las Addllamadas DetectChangesque son responsables del bajo rendimiento que experimentó.
En contraste con esto, la ObjectContextAPI llama DetectChangessolo automáticamente en SaveChangespero no en AddObjecty los otros métodos correspondientes mencionados anteriormente. Esa es la razón por la que el rendimiento predeterminado de ObjectContextes más rápido.
¿Por qué introdujeron esta detección automática de cambios predeterminada DbContexten tantas funciones? No estoy seguro, pero parece que deshabilitarlo y llamar DetectChangesmanualmente en los puntos adecuados se considera avanzado y puede introducir fácilmente errores sutiles en su aplicación, así que utilícelo con cuidado .