Maison >développement back-end >C++ >Pourquoi mon opération asynchrone Entity Framework est-elle 10 fois plus lente que synchrone ?
Problème :
Les appels à la base de données Asynchronous Entity Framework présentent des performances nettement plus lentes que leurs homologues synchrones, avec un temps d'exécution souvent multiplié par dix. Prenons cet exemple :
<code class="language-csharp">// Retrieve albums var albums = await this.context.Albums .Where(x => x.Artist.ID == artist.ID) .ToListAsync();</code>
Cause fondamentale :
Ce problème de performances provient d'une faille dans l'implémentation asynchrone d'EF 6. Lorsqu'il s'agit de tables contenant des colonnes binaires, EF utilise de manière incorrecte la récupération de données non séquentielle (CommandBehavior.Default) au lieu de l'accès séquentiel plus efficace (CommandBehavior.SequentialAccess).
Bien que les futures versions d'EF devraient résoudre ce problème, une solution de contournement consiste à encapsuler manuellement l'opération synchrone dans une méthode asynchrone à l'aide de TaskCompletionSource<T>
. Cela contourne l'implémentation asynchrone inefficace d'EF.
La baisse de performances dans les opérations asynchrones d'Entity Framework n'est pas inhérente à la programmation asynchrone mais un bug spécifique dans l'implémentation d'EF 6. L'utilisation d'un wrapper asynchrone manuel atténue efficacement ce goulot d'étranglement en termes de performances et améliore la réactivité des applications.
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!