Heim >Backend-Entwicklung >C++ >Warum ist der asynchrone Vorgang meines Entity Frameworks 10x langsamer als sein synchrones Gegenstück?
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:
CommandBehavior.Default
.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!