Heim >Backend-Entwicklung >C++ >Warum ist der asynchrone Vorgang meines Entity Frameworks 10x langsamer als sein synchrones Gegenstück?

Warum ist der asynchrone Vorgang meines Entity Frameworks 10x langsamer als sein synchrones Gegenstück?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-10 18:46:42519Durchsuche

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

Entity Framework Async: Ein erheblicher Leistungsengpass

In diesem Artikel wird ein Leistungsproblem beschrieben, das bei der Verwendung der asynchronen Methoden von Entity Framework aufgetreten ist. Der Autor entdeckte eine Verzehnfachung der Ausführungszeit für asynchrone Abfragen im Vergleich zu ihren synchronen Gegenstücken.

Das Problem: Synchrone Abfragen wurden innerhalb von Sekunden abgeschlossen, während ihre asynchronen Äquivalente zehnmal länger dauerten.

Fehlerbehebung: SQL Server Profiler bestätigte identische SQL-Abfragen sowohl für synchrone als auch für asynchrone Aufrufe. Weitere Untersuchungen brachten den Schuldigen zu Tage: Der asynchrone Vorgang erzeugte über zwei Millionen Aufgaben und verursachte einen erheblichen Mehraufwand.

Ursache: Das Problem ist auf einen Fehler in der asynchronen Implementierung von Entity Framework 6 zurückzuführen. Beim Umgang mit Tabellen, die große Binärspalten enthalten, sollte das Framework bei asynchronen Aufrufen automatisch das Flag CommandBehavior.SequentialAccess verwenden. Diese entscheidende Optimierung fehlte.

Lösung: Der Autor schlägt vor, die integrierten asynchronen Methoden von Entity Framework zu umgehen. Eine Problemumgehung mit TaskCompletionSource ermöglicht die manuelle asynchrone Ausführung und stellt sicher, dass CommandBehavior.SequentialAccess für Tabellen mit großen Binärdaten korrekt angewendet wird.

Wichtige Beobachtungen:

  • Ado.Net weist eine ähnliche Leistungseinbuße bei asynchronen Vorgängen für Tabellen mit großen Binärspalten auf und CommandBehavior.Default.
  • Der Leistungsunterschied war am deutlichsten bei großen Binärspalten (256 KB in den Tests des Autors).
  • Die CPU-Nutzungsmuster waren ungewöhnlich: Der synchrone Betrieb verbrauchte 12 % CPU, während der asynchrone Betrieb einen Spitzenwert von 20 % erreichte, was auf einen möglichen Ressourcenkonflikt hindeutet.

Das obige ist der detaillierte Inhalt vonWarum ist der asynchrone Vorgang meines Entity Frameworks 10x langsamer als sein synchrones Gegenstück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn