Entity Framework Async : un goulot d'étranglement important en matière de performances
Cet article détaille un problème de performances rencontré lors de l'utilisation des méthodes asynchrones d'Entity Framework. L'auteur a découvert un temps d'exécution décuplé pour les requêtes asynchrones par rapport à leurs homologues synchrones.
Le problème : Les requêtes synchrones se sont terminées en quelques secondes, alors que leurs équivalents asynchrones ont pris dix fois plus de temps.
Débogage du problème : SQL Server Profiler a confirmé des requêtes SQL identiques pour les appels synchrones et asynchrones. Une enquête plus approfondie a révélé le coupable : l'opération asynchrone a généré plus de deux millions de tâches et entraîné des frais généraux importants.
Cause première : Le problème provenait d'un bug dans l'implémentation asynchrone d'Entity Framework 6. Lorsqu'il s'agit de tables contenant de grandes colonnes binaires, le framework doit automatiquement utiliser l'indicateur CommandBehavior.SequentialAccess
dans les appels asynchrones. Cette optimisation cruciale manquait.
Résolution : L'auteur suggère de contourner les méthodes asynchrones intégrées d'Entity Framework. Une solution de contournement utilisant TaskCompletionSource
permet une exécution asynchrone manuelle, garantissant que CommandBehavior.SequentialAccess
est appliqué correctement pour les tables contenant des données binaires volumineuses.
Observations clés :
CommandBehavior.Default
.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!