Steigerung der Dateneinfügungsgeschwindigkeit von Entity Framework
Das Einfügen großer Datenmengen in Entity Framework erfordert optimierte Techniken. In diesem Artikel werden die effizientesten Methoden zum Erreichen schneller Einfügegeschwindigkeiten untersucht.
Die Gefahr häufiger SaveChanges()
Anrufe
Das Aufrufen SaveChanges()
für jeden Datensatz ist ein großer Leistungsengpass. Vermeiden Sie diese Vorgehensweise, um die Geschwindigkeit zu maximieren. Betrachten Sie diese Alternativen:
Charge SaveChanges()
:
SaveChanges()
-Aufruf aus, um alle Einfügungen gleichzeitig zu übernehmen.Periodisch SaveChanges()
:
SaveChanges()
nach jedem Stapel auf.Kontextrecycling:
DbContext
nach jedem SaveChanges()
und erstellen Sie ein neues. Dies verhindert die Anhäufung von verfolgten Entitäten, die sich im Laufe der Zeit erheblich auf die Leistung auswirken können.Illustrativer Code:
Dieses Beispiel zeigt eine effiziente Einfügungsstrategie:
<code class="language-csharp">using (TransactionScope scope = new TransactionScope()) { MyDbContext context = null; try { context = new MyDbContext(); context.Configuration.AutoDetectChangesEnabled = false; int count = 0; foreach (var entityToInsert in someCollectionOfEntitiesToInsert) { ++count; context = AddToContext(context, entityToInsert, count, 100, true); } context.SaveChanges(); } finally { if (context != null) context.Dispose(); } scope.Complete(); }</code>
Benchmark-Ergebnisse:
Ein Test mit 560.000 Unternehmen ergab folgende Ergebnisse:
SaveChanges()
:Mehrere Stunden (extrem langsam)Diese Ergebnisse zeigen, dass periodisches SaveChanges()
mit Kontextentsorgung die beste Leistung bietet.
Das obige ist der detaillierte Inhalt vonWie kann ich das Entity Framework für das Einfügen großer Datenmengen optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!