Maison >développement back-end >C++ >Quel est le moyen le plus rapide d'insérer 4000 enregistrements dans une base de données à l'aide de l'entité Framework dans une transactionScope?
Lorsque vous utilisez TransactionScope pour le traitement des transactions, comment insérer rapidement plus de 4 000 enregistrements dans la base de données?
Réponse:
Pour une grande quantité d'insertion de données (4000 enregistrements), l'efficacité de la méthode est extrêmement faible. La technologie d'optimisation suivante peut améliorer considérablement la vitesse d'insertion:
SaveChanges()
One -Time
SaveChanges()
Lot : SaveChanges()
Après avoir manipulé la quantité spécifiée (par exemple, 100 éléments), appelez SaveChanges()
Contexte de reconstruction: similaire à la méthode par lots, mais libérez le contexte et créez un nouveau contexte pour libérer l'entité supplémentaire après SaveChanges()
. SaveChanges()
sur . SaveChanges()
Configuration.AutoDetectChangesEnabled
Le fragment de code suivant combine la technologie d'optimisation ci-dessus: false
. De plus, la libération et la re-création du contexte aideront à supprimer les entités supplémentaires, réduisant ainsi l'utilisation de la mémoire et l'amélioration des performances. Comparaison des performances:
Utilisez ce mode d'optimisation pour insérer 560 000 entités dans les résultats des tests de performance de la base de données:
<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 secondes
, : 164 secondes
En revanche, si vous appelez
pour chaque enregistrement, il faudra des heures pour terminer la même opération.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!