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?

Was ist der schnellste Weg, um 4000 Datensätze mithilfe von Entity -Framework in einem Transactionscope in eine Datenbank einzufügen?

Barbara Streisand
Barbara StreisandOriginal
2025-02-02 06:11:14199Durchsuche

What's the Fastest Way to Insert 4000  Records into a Database Using Entity Framework within a TransactionScope?

Entity Framework fügen Sie die Datenmethode effizient ein

ein

<:> Frage:

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

:
    Nachdem alle Datensätze zum Kontext hinzugefügt werden, ist der verfügbare Aufruf
  • . SaveChanges() Batch : SaveChanges() Nach dem Umgang mit der angegebenen Menge (z. B. 100 Elemente) können Sie
  • aufrufen.
  • 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.
  • Änderungen deaktivieren, um zu testen: vorübergehend deaktivierte automatische Änderungen, um zu testen, SaveChanges() auf festlegen. SaveChanges()
  • Implementierungsbeispiel: Configuration.AutoDetectChangesEnabled Das folgende Codefragment kombiniert die obige Optimierungstechnologie: false
Dieser Modus erreicht die Stapelinsertion, indem mehrere Datensätze verarbeitet werden, bevor Sie

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!

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn