Maison > développement back-end > C++ > Comment puis-je optimiser les inserts du cadre d'entité pour les grands ensembles de données et éviter les délais d'expiration?

Comment puis-je optimiser les inserts du cadre d'entité pour les grands ensembles de données et éviter les délais d'expiration?

DDD
Libérer: 2025-02-02 06:01:13
original
204 Les gens l'ont consulté

How Can I Optimize Entity Framework Inserts for Large Datasets and Avoid Timeouts?

Frameurs de l'entité augmentant les performances d'insertion avec de grands ensembles de données

L'insertion de données à grande échelle dans Entity Framework peut conduire à des goulots d'étranglement de performances significatifs et des délais d'attente de transaction. Cet article décrit les stratégies pour optimiser ce processus.

Minimiser SaveChanges() appels:

Les appels répétés à SaveChanges() après chaque insertion réduisent considérablement l'efficacité. Au lieu de cela, utilisez ces techniques:

  • Inserts de lots: Exécuter SaveChanges() Une seule fois après tout les enregistrements sont ajoutés.
  • Inserts basés sur des intervalles: Appelez SaveChanges() à intervalles réguliers (par exemple, tous les 100 enregistrements).
  • Recyclage du contexte: savechanges () à intervalles, puis disposer et recréer le contexte pour libérer des entités ci-jointes.

Exemple d'insert en vrac efficace:

Le code suivant démontre un modèle d'insertion en vrac haute performance:

<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 largeDataset)
        {
            ++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 batchSize, bool recycleContext)
{
    context.Set<Entity>().Add(entity);

    if (count % batchSize == 0)
    {
        context.SaveChanges();
        if (recycleContext)
        {
            context.Dispose();
            context = new MyDbContext();
            context.Configuration.AutoDetectChangesEnabled = false;
        }
    }

    return context;
}</code>
Copier après la connexion

Paramètres de réglage des performances clés:

  • batchSize: Expérimentez les valeurs (par exemple, 100-1000) pour trouver la taille optimale du lot pour votre système.
  • recycleContext: Recycler le contexte améliore les performances en effacistant les entités suivies. Testez pour déterminer si cela offre un avantage dans votre scénario spécifique.
  • SaveChanges() Fréquence: Déterminez attentivement la fréquence idéale de SaveChanges() appelle pour votre volume de données et votre configuration de base de données.

En mettant en œuvre ces meilleures pratiques, vous pouvez considérablement améliorer les performances d'insertion du cadre d'entité et empêcher les délais d'emploi lorsque vous travaillez avec de grands ensembles de données.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal