Heim >Backend-Entwicklung >C++ >Wie kann ich Entity Framework -Einfügungen für große Datensätze optimieren?
Entity Framework: Optimierung großer Datensatzeinfügungen
effizientes Einfügen großer Datensätze in das Entity -Framework ist für die Leistung von entscheidender Bedeutung. Eine häufige Herausforderung entsteht bei der Verwendung TransactionScope
mit einer großen Anzahl von Datensätzen (z. B. 4000) und überschreitet möglicherweise das Standardtransaktionszeitüberschreitungen (10 Minuten). Der Schlüssel besteht darin, häufige Aufrufe zu SaveChanges()
zu vermeiden, was den Prozess erheblich verlangsamt.
Mehrere Strategien können die Geschwindigkeit der Masseneinfügungsgeschwindigkeit drastisch verbessern:
SaveChanges()
: , anstatt nach jedem Datensatz zu speichern, rufen Sie SaveChanges()
nach, nachdem alle Datensätze zum Kontext hinzugefügt wurden. SaveChanges()
: aufrufen SaveChanges()
nach einer vorbestimmten Anzahl von Datensätzen (z. B. 100 oder 1000). SaveChanges()
, entsorgen Sie den Kontext und erstellen Sie eine neue. Dies löscht den Veränderer des Kontextes und verbessert die Leistung weiter. Behinderung der Änderungsverfolgung (AutoDetectChangesEnabled = false
) steigert auch die Effizienz während des Bulk -Betriebs.
Beispielimplementierung:
Der folgende Code zeigt einen Hochleistungs-Bulk-Insert-Ansatz unter Verwendung von Batching und Kontext-Recycling:
<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, 1000, true); // Commit every 1000 records } context.SaveChanges(); } finally { context?.Dispose(); } scope.Complete(); } private MyDbContext AddToContext(MyDbContext context, Entity entity, int count, int commitCount, bool recreateContext) { context.Set<Entity>().Add(entity); if (count % commitCount == 0) { context.SaveChanges(); if (recreateContext) { context.Dispose(); context = new MyDbContext(); context.Configuration.AutoDetectChangesEnabled = false; } } return context; }</code>
Dieses Beispiel verpflichtet alle 1000 Aufzeichnungen und erstellt den Kontext nach jedem Commit. Experimentieren können zeigen, dass verschiedene commitCount
-Werte (z. B. 100, 500, 1000) je nach Ihrer spezifischen Umgebung und Daten optimale Ergebnisse liefern. Der Schlüssel besteht darin, das Gleichgewicht zwischen der Minimierung von SaveChanges()
-Anrufen und der effektiven Verwaltung des Speicherverbrauchs zu finden.
Das obige ist der detaillierte Inhalt vonWie kann ich Entity Framework -Einfügungen für große Datensätze optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!