Maison >base de données >tutoriel mysql >Comment puis-je optimiser les performances d'insertion en masse dans Entity Framework ?
Insérer de grandes quantités de données dans une base de données à l'aide d'Entity Framework peut être une tâche difficile. En particulier lorsque vous travaillez dans le cadre d'une transaction et que le volume de données dépasse 4 000 enregistrements, cela peut entraîner des transactions incomplètes.
Pour résoudre ce problème, il est important de comprendre que l'appel de SaveChanges()
sur chaque enregistrement peut avoir un impact important sur les performances. Il est recommandé d'adopter les stratégies d'optimisation suivantes :
Appeler SaveChanges()
en une seule fois : Au lieu d'appeler SaveChanges()
après la sauvegarde de chaque enregistrement, accumulez les modifications et enregistrez-les toutes en une seule fois une fois que tous les enregistrements ont été traités.
Batch SaveChanges()
: Si la sauvegarde de tous les enregistrements en même temps est encore trop lente, envisagez d'appeler SaveChanges()
tous les certains nombres d'enregistrements (par exemple 100).
Créez et publiez périodiquement des contextes : Lors des modifications par lots, pensez à créer un nouveau contexte et à libérer le contexte existant après chaque lot pour effacer les entités accumulées dans le contexte.
Désactiver la détection des modifications : En désactivant la détection automatique des modifications, Entity Framework peut se concentrer sur l'insertion de nouveaux enregistrements sans perdre de temps à suivre les modifications.
Exemple de code :
<code class="language-csharp">using (TransactionScope scope = new TransactionScope()) { using (var context = new MyDbContext()) { context.Configuration.AutoDetectChangesEnabled = false; int count = 0; foreach (var entity in entities) { ++count; context.Set<MyEntity>().Add(entity); // 使用更明确的类型 if (count % 100 == 0) { context.SaveChanges(); } } context.SaveChanges(); // 保存剩余的记录 } scope.Complete(); }</code>
Référence de performances :
Pour le test auprès de 560 000 entités, les résultats de référence suivants ont été observés :
Ces optimisations améliorent considérablement les performances et garantissent une insertion réussie d'ensembles de données volumineux dans les délais d'expiration des transactions. Le choix d'une taille de lot appropriée et l'opportunité de recréer le contexte nécessitent des réglages et des tests en fonction des circonstances réelles.
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!