Entity Framework の非同期: 重大なパフォーマンスのボトルネック
この記事では、Entity Framework の非同期メソッドの使用中に発生したパフォーマンスの問題について詳しく説明します。 著者は、同期クエリと比較して、非同期クエリの実行時間が 10 倍増加していることを発見しました。
問題: 同期クエリは数秒以内に完了しましたが、同等の非同期クエリには 10 倍の時間がかかりました。
問題のデバッグ: SQL Server Profiler は、同期呼び出しと非同期呼び出しの両方で同一の SQL クエリを確認しました。 さらなる調査により、原因が判明しました。非同期操作により 200 万を超えるタスクが生成され、重大なオーバーヘッドが発生しました。
根本原因: この問題は、Entity Framework 6 の非同期実装のバグから発生しました。 大きなバイナリ列を含むテーブルを扱う場合、フレームワークは非同期呼び出しで CommandBehavior.SequentialAccess
フラグを自動的に利用する必要があります。 この重要な最適化が欠落していました。
解決策: 著者は、Entity Framework の組み込みの非同期メソッドをバイパスすることを提案しています。 TaskCompletionSource
を使用した回避策により、手動での非同期実行が可能になり、大規模なバイナリ データを含むテーブルに CommandBehavior.SequentialAccess
が正しく適用されるようになります。
主な所見:
CommandBehavior.Default
.以上がEntity Framework の非同期操作が同期操作よりも 10 倍遅いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。