Wie bereits von Ladislav im Kommentar angegeben, müssen Sie die automatische Änderungserkennung deaktivieren, um die Leistung zu verbessern:
context.Configuration.AutoDetectChangesEnabled = false;
Diese Änderungserkennung ist in der DbContextAPI standardmäßig aktiviert .
Der Grund, warum DbContextsich das ObjectContextVerhalten von der API so unterscheidet, ist, dass viel mehr Funktionen der DbContextAPI DetectChangesintern aufgerufen werden als Funktionen der ObjectContextAPI, wenn die automatische Änderungserkennung aktiviert ist.
Hier finden Sie eine Liste der Funktionen, die DetectChangesstandardmäßig aufgerufen werden. Sie sind:
- Die
Add, Attach, Find, Local, oder RemoveMitglieder aufDbSet
- Die
GetValidationErrors, Entryoder SaveChangesMitglieder aufDbContext
- Die
EntriesMethode aufDbChangeTracker
Besonders AddAnrufe, DetectChangesdie für die schlechte Leistung verantwortlich sind, die Sie erlebt haben.
Im Gegensatz dazu ObjectContextruft die API DetectChangesnur automatisch in, SaveChangesaber nicht in AddObjectund den anderen oben genannten entsprechenden Methoden auf. Dies ist der Grund, warum die Standardleistung von ObjectContextschneller ist.
Warum haben sie diese standardmäßige automatische Änderungserkennung DbContextin so vielen Funktionen eingeführt? Ich bin mir nicht sicher, aber es scheint, dass das Deaktivieren und DetectChangesmanuelle Aufrufen an den richtigen Stellen als fortgeschritten angesehen wird und leicht subtile Fehler in Ihre Anwendung einbringen kann. Verwenden Sie [es] daher mit Vorsicht .