Maison > développement back-end > C++ > Pourquoi mon opération asynchrone Entity Framework est-elle 10 fois plus lente que son homologue synchrone ?

Pourquoi mon opération asynchrone Entity Framework est-elle 10 fois plus lente que son homologue synchrone ?

Mary-Kate Olsen
Libérer: 2025-01-10 18:46:42
original
519 Les gens l'ont consulté

Why is My Entity Framework Async Operation 10x Slower Than Its Synchronous Counterpart?

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 :

  • Ado.Net présente une dégradation de performances similaire avec des opérations asynchrones sur des tables contenant de grandes colonnes binaires et CommandBehavior.Default.
  • La différence de performances était plus visible avec les grandes colonnes binaires (256 Ko dans les tests de l'auteur).
  • Les modèles d'utilisation du processeur étaient inhabituels : l'opération synchrone utilisait 12 % du processeur, tandis que l'opération asynchrone atteignait un pic à 20 %, ce qui laisse présager un conflit potentiel de ressources.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal