Heim > Datenbank > MySQL-Tutorial > Wie kann ich Masseneinfügungen im Entity Framework optimieren, um die Leistung zu verbessern?

Wie kann ich Masseneinfügungen im Entity Framework optimieren, um die Leistung zu verbessern?

Patricia Arquette
Freigeben: 2025-01-23 21:52:10
Original
785 Leute haben es durchsucht

How Can I Optimize Bulk Inserts in Entity Framework for Improved Performance?

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();
}
Nach dem Login kopieren

Leistungsanalyse:

Tests mit 560.000 Entitäten (9 Skalareigenschaften) ergaben folgende Ergebnisse:

  • Inkrementell SaveChanges() (Commit-Anzahl 1): > 20 Minuten
  • Batch SaveChanges() (Commit-Anzahl 1000): 242 Sekunden
  • Batchverarbeitung SaveChanges() mit Kontextentsorgung (Commit-Anzahl 100): 164 Sekunden

Fazit:

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!

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage