Heim >Backend-Entwicklung >C++ >Warum ist der asynchrone Vorgang meines Entity Framework 6 10x langsamer als sein synchrones Gegenstück?
In diesem Artikel wird ein häufiges Problem untersucht, das bei der Verwendung von asynchronen Vorgängen mit Entity Framework (EF) 6 auftritt: erhebliche Leistungseinbußen im Vergleich zu synchronen Vorgängen. Wir gehen den Ursachen dieses Verhaltens auf den Grund und bieten Lösungen an.
Benutzer erleben häufig erhebliche Verlangsamungen, sogar zehnmal oder mehr, wenn sie Entity Framework-Abfragen auf ihre asynchronen Äquivalente umstellen (z. B. mit ToListAsync() anstelle von ToList()).
Nachdem ich den SQL Server Profiler untersucht hatte, stellte ich fest, dass die zugrunde liegende SQL-Abfrage sowohl für synchrone als auch für asynchrone EF-Aufrufe gleich bleibt. Allerdings dauert die Ausführung asynchroner Vorgänge deutlich länger.
Der Leistungsunterschied ist auf interne Implementierungsdetails der asynchronen EF 6-Vorgänge zurückzuführen. Im Gegensatz zur synchronen Version verwendet die asynchrone Version einen Puffermechanismus, um Daten nicht sequentiell aus der Datenbank zu lesen. Dieser Ansatz soll in einigen Fällen die Leistung verbessern, kann jedoch beim Umgang mit großen Spalten mit Binärdaten negative Auswirkungen haben.
Der Pufferungsprozess umfasst die Erstellung einer großen Anzahl asynchroner Aufgaben, was einen hohen Overhead in Bezug auf die Aufgabenerstellung, Synchronisierung und Thread-Nutzung verursacht. Dieser Overhead führt in Kombination mit nicht sequentiellen Datenlesevorgängen zu erheblichen Leistungseinbußen.
Um dieses Problem zu mildern, wird empfohlen, die Verwendung der asynchronen Vorgänge von EF 6 mit Tabellen zu vermeiden, die binäre Datenspalten enthalten. Führen Sie die Abfrage stattdessen synchron aus und verwenden Sie dabei TaskCompletionSource
Während die asynchronen Vorgänge von EF 6 in einigen Fällen die Leistung verbessern können, kann die Art und Weise, wie sie derzeit implementiert werden, bei der Verarbeitung großer Binärdaten einen erheblichen Overhead verursachen. Entwickler sollten sich dieser Einschränkung bewusst sein und gegebenenfalls den Einsatz von Alternativen in Betracht ziehen.
Das obige ist der detaillierte Inhalt vonWarum ist der asynchrone Vorgang meines Entity Framework 6 10x langsamer als sein synchrones Gegenstück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!