Heim >Backend-Entwicklung >C++ >Warum ist der asynchrone Vorgang meines Entity Frameworks 10x langsamer als der synchrone?
Problem:
Asynchrone Entity Framework-Datenbankaufrufe weisen eine deutlich langsamere Leistung auf als ihre synchronen Gegenstücke und weisen häufig eine Verzehnfachung der Ausführungszeit auf. Betrachten Sie dieses Beispiel:
<code class="language-csharp">// Retrieve albums var albums = await this.context.Albums .Where(x => x.Artist.ID == artist.ID) .ToListAsync();</code>
Grundursache:
Dieses Leistungsproblem ist auf einen Fehler in der asynchronen Implementierung von EF 6 zurückzuführen. Beim Umgang mit Tabellen, die binäre Spalten enthalten, verwendet EF fälschlicherweise den nicht sequentiellen Datenabruf (CommandBehavior.Default) anstelle des effizienteren sequentiellen Zugriffs (CommandBehavior.SequentialAccess).
Während zukünftige EF-Versionen dieses Problem voraussichtlich beheben werden, besteht eine Problemumgehung darin, den synchronen Vorgang mithilfe von TaskCompletionSource<T>
manuell in eine asynchrone Methode einzubinden. Dadurch wird die ineffiziente asynchrone Implementierung von EF umgangen.
Der Leistungsabfall bei asynchronen Entity Framework-Vorgängen ist nicht auf die asynchrone Programmierung zurückzuführen, sondern ein spezifischer Fehler in der Implementierung von EF 6. Durch den Einsatz eines manuellen asynchronen Wrappers wird dieser Leistungsengpass effektiv gemildert und die Reaktionsfähigkeit der Anwendung verbessert.
Das obige ist der detaillierte Inhalt vonWarum ist der asynchrone Vorgang meines Entity Frameworks 10x langsamer als der synchrone?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!