Maison >base de données >tutoriel mysql >Comment puis-je optimiser Entity Framework pour l'insertion de données à grand volume ?

Comment puis-je optimiser Entity Framework pour l'insertion de données à grand volume ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-23 21:42:10965parcourir

How Can I Optimize Entity Framework for High-Volume Data Insertion?

Augmenter la vitesse d'insertion des données d'Entity Framework

L'insertion de données volumineuses dans Entity Framework nécessite des techniques optimisées. Cet article explore les méthodes les plus efficaces pour atteindre des vitesses d'insertion rapides.

Le piège des SaveChanges() appels fréquents

Appeler SaveChanges() pour chaque enregistrement est un goulot d'étranglement majeur en termes de performances. Pour maximiser la vitesse, évitez cette pratique. Considérez ces alternatives :

Lot SaveChanges() :

  • Exécutez un seul SaveChanges() appel pour valider toutes les insertions simultanément.

Périodique SaveChanges() :

  • Traitez les insertions par lots (par exemple, 100 enregistrements) et appelez SaveChanges() après chaque lot.

Recyclage contextuel :

  • Jetez le DbContext après chaque SaveChanges() et créez-en un nouveau. Cela évite l'accumulation d'entités suivies, ce qui peut avoir un impact significatif sur les performances au fil du temps.

Code illustratif :

Cet exemple présente une stratégie d'insertion efficace :

<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();
}</code>

Résultats de référence :

Un test impliquant 560 000 entités a donné ces résultats :

  • Individuel SaveChanges() : Plusieurs heures (extrêmement lent)
  • Lot à 100 enregistrements : 164 secondes
  • Lot à 1000 enregistrements : 191 secondes

Ces résultats indiquent que les SaveChanges() périodiques avec élimination contextuelle offrent les meilleures performances.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn