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 DbContext
API standardmäßig aktiviert .
Der Grund, warum DbContext
sich das ObjectContext
Verhalten von der API so unterscheidet, ist, dass viel mehr Funktionen der DbContext
API DetectChanges
intern aufgerufen werden als Funktionen der ObjectContext
API, wenn die automatische Änderungserkennung aktiviert ist.
Hier finden Sie eine Liste der Funktionen, die DetectChanges
standardmäßig aufgerufen werden. Sie sind:
- Die
Add
, Attach
, Find
, Local
, oder Remove
Mitglieder aufDbSet
- Die
GetValidationErrors
, Entry
oder SaveChanges
Mitglieder aufDbContext
- Die
Entries
Methode aufDbChangeTracker
Besonders Add
Anrufe, DetectChanges
die für die schlechte Leistung verantwortlich sind, die Sie erlebt haben.
Im Gegensatz dazu ObjectContext
ruft die API DetectChanges
nur automatisch in, SaveChanges
aber nicht in AddObject
und den anderen oben genannten entsprechenden Methoden auf. Dies ist der Grund, warum die Standardleistung von ObjectContext
schneller ist.
Warum haben sie diese standardmäßige automatische Änderungserkennung DbContext
in so vielen Funktionen eingeführt? Ich bin mir nicht sicher, aber es scheint, dass das Deaktivieren und DetectChanges
manuelle Aufrufen an den richtigen Stellen als fortgeschritten angesehen wird und leicht subtile Fehler in Ihre Anwendung einbringen kann. Verwenden Sie [es] daher mit Vorsicht .