Heim >Backend-Entwicklung >C++ >Was ist der schnellste Weg, um 4000 Datensätze mithilfe von Entity -Framework in einem Transactionscope in eine Datenbank einzufügen?
Entity Framework fügen Sie die Datenmethode effizient ein
Wie kann bei der Verwendung von TransactionsCope für die Transaktionsverarbeitung schnell mehr als 4.000 Datensätze in die Datenbank eingefügt werden?
Antwort:
Für eine große Menge an Dateninsertion (4000 Datensätze) ist die -Methodeneffizienz extrem niedrig. Die folgende Optimierungstechnologie kann die Einfügungsgeschwindigkeit erheblich verbessern:
SaveChanges()
Ein -Zeit
SaveChanges()
Batch : SaveChanges()
Nach dem Umgang mit der angegebenen Menge (z. B. 100 Elemente) können Sie SaveChanges()
Rekonstruktionskontext: Ähnlich der Batch -Methode, aber den Kontext freigeben und einen neuen Kontext erstellen, um die zusätzliche Entität nach SaveChanges()
zu veröffentlichen. SaveChanges()
auf festlegen. SaveChanges()
Configuration.AutoDetectChangesEnabled
Das folgende Codefragment kombiniert die obige Optimierungstechnologie: false
aufrufen. Darüber hinaus hilft die Veröffentlichung und Wiederherstellung des Kontextes dazu, die zusätzlichen Entitäten zu entfernen, wodurch der Speichergebrauch und die Verbesserung der Leistung verringert werden. Leistungsvergleich:
Verwenden Sie diesen Optimierungsmodus, um 560.000 Entitäten in die Leistungstestergebnisse der Datenbank einzufügen:
<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(); } 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>
SaveChanges()
, SaveChanges()
: 202 Sekunden
, : 164 Sekunden
Im Gegensatz dazu dauert es stundenlang, wenn Sie für jeden Datensatz
aufrufen, die gleiche Operation durchführen.Das obige ist der detaillierte Inhalt vonWas ist der schnellste Weg, um 4000 Datensätze mithilfe von Entity -Framework in einem Transactionscope in eine Datenbank einzufügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!