Das Einfügen großer Datenmengen in eine Datenbank mithilfe von Entity Framework kann eine herausfordernde Aufgabe sein. Insbesondere wenn innerhalb eines Transaktionsbereichs gearbeitet wird und das Datenvolumen 4000 Datensätze überschreitet, kann es zu unvollständigen Transaktionen kommen.
Um dieses Problem zu beheben, ist es wichtig zu verstehen, dass der Aufruf von SaveChanges()
für jeden Datensatz die Leistung erheblich beeinträchtigen kann. Es wird empfohlen, die folgenden Optimierungsstrategien anzuwenden:
Rufen Sie SaveChanges()
auf einmal auf: Anstatt SaveChanges()
nach dem Speichern jedes Datensatzes aufzurufen, akkumulieren Sie Änderungen und speichern Sie sie alle auf einmal, nachdem alle Datensätze verarbeitet wurden.
Batch SaveChanges()
: Wenn das Speichern aller Datensätze auf einmal immer noch zu langsam ist, sollten Sie SaveChanges()
für jede bestimmte Anzahl von Datensätzen (z. B. 100) aufrufen.
Kontexte regelmäßig erstellen und freigeben: Wenn Sie Änderungen stapelweise verarbeiten, sollten Sie erwägen, einen neuen Kontext zu erstellen und den vorhandenen Kontext nach jedem Stapel freizugeben, um die angesammelten Entitäten im Kontext zu löschen.
Änderungserkennung deaktivieren: Durch die Deaktivierung der automatischen Änderungserkennung kann sich Entity Framework auf das Einfügen neuer Datensätze konzentrieren, ohne Zeit mit der Nachverfolgung von Änderungen zu verbringen.
Codebeispiel:
<code class="language-csharp">using (TransactionScope scope = new TransactionScope()) { using (var context = new MyDbContext()) { context.Configuration.AutoDetectChangesEnabled = false; int count = 0; foreach (var entity in entities) { ++count; context.Set<MyEntity>().Add(entity); // 使用更明确的类型 if (count % 100 == 0) { context.SaveChanges(); } } context.SaveChanges(); // 保存剩余的记录 } scope.Complete(); }</code>
Leistungsbenchmark:
Für den Test mit 560.000 Entitäten wurden folgende Benchmark-Ergebnisse beobachtet:
Diese Optimierungen verbessern die Leistung erheblich und stellen das erfolgreiche Einfügen großer Datensätze innerhalb der Transaktions-Timeout-Grenzen sicher. Die Auswahl einer geeigneten Stapelgröße und die Frage, ob der Kontext neu erstellt werden soll, erfordern eine Abstimmung und Tests auf der Grundlage tatsächlicher Umstände.
Das obige ist der detaillierte Inhalt vonWie kann ich die Leistung von Masseneinfügungen im Entity Framework optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!