Steigerung der Entity Framework-Masseneinfügungsleistung: Strategien und Benchmarks
Das effiziente Einfügen großer Datensätze in Entity Framework ist entscheidend, um Leistungsengpässe zu vermeiden. Dieser Artikel befasst sich mit der Herausforderung, 4000 Datensätze in eine Transaktion einzufügen, ein Szenario, das anfällig für unvollständige Transaktionen ist.
Die Fallstricke häufiger SaveChanges()
Anrufe vermeiden
Der primäre Leistungsverlust ergibt sich aus dem wiederholten Aufruf SaveChanges()
für jeden Datensatz. Dieser Ansatz verlangsamt den Prozess erheblich. So optimieren Sie:
1. Einzelner SaveChanges()
-Aufruf: Führt einen einzelnen SaveChanges()
-Aufruf aus, nachdem alle Datensätze hinzugefügt wurden.
2. Gestapelte SaveChanges()
-Aufrufe: Fügen Sie Datensätze in Stapeln ein (z. B. 100 oder 1000) und rufen Sie SaveChanges()
nach jedem Stapel auf.
3. Kontextentsorgung mit Batch SaveChanges()
: Kombinieren Sie Batchverarbeitung mit der Erstellung eines neuen Datenbankkontexts nach jedem SaveChanges()
-Aufruf. Dadurch wird der Kontext geklärt und die Leistung weiter verbessert.
Optimiertes Masseneinfügungsmuster:
Dieser Code veranschaulicht den empfohlenen Ansatz:
using (TransactionScope scope = new TransactionScope()) { using (MyDbContext context = new MyDbContext()) { context.Configuration.AutoDetectChangesEnabled = false; int count = 0; int commitCount = 100; // Adjust as needed foreach (var entity in someCollection) { count++; context.Set<entity>().Add(entity); if (count % commitCount == 0) { context.SaveChanges(); context.Dispose(); context = new MyDbContext(); context.Configuration.AutoDetectChangesEnabled = false; } } context.SaveChanges(); } scope.Complete(); }
Leistungsanalyse:
Tests mit 560.000 Entitäten (9 Skalareigenschaften) ergaben folgende Ergebnisse:
SaveChanges()
(Commit-Anzahl 1): > 20 MinutenSaveChanges()
(Commit-Anzahl 1000): 242 SekundenSaveChanges()
mit Kontextentsorgung (Commit-Anzahl 100): 164 SekundenFazit:
Durch die Vermeidung häufiger SaveChanges()
Aufrufe und die Verwendung von Batch-Einfügungen mit Kontextentsorgung werden bei Entity Framework-Masseneinfügungen erhebliche Leistungssteigerungen erzielt. Diese Optimierung minimiert das Risiko von Transaktionszeitüberschreitungen und gewährleistet eine effiziente Datenverarbeitung innerhalb aktiver Transaktionen.
Das obige ist der detaillierte Inhalt vonWie kann ich Masseneinfügungen im Entity Framework optimieren, um die Leistung zu verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!