ホームページ > バックエンド開発 > C++ > Entity Framework の非同期操作が同期操作よりも 10 倍遅いのはなぜですか?

Entity Framework の非同期操作が同期操作よりも 10 倍遅いのはなぜですか?

Mary-Kate Olsen
リリース: 2025-01-10 18:46:42
オリジナル
521 人が閲覧しました

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

Entity Framework の非同期: 重大なパフォーマンスのボトルネック

この記事では、Entity Framework の非同期メソッドの使用中に発生したパフォーマンスの問題について詳しく説明します。 著者は、同期クエリと比較して、非同期クエリの実行時間が 10 倍増加していることを発見しました。

問題: 同期クエリは数秒以内に完了しましたが、同等の非同期クエリには 10 倍の時間がかかりました。

問題のデバッグ: SQL Server Profiler は、同期呼び出しと非同期呼び出しの両方で同一の SQL クエリを確認しました。 さらなる調査により、原因が判明しました。非同期操作により 200 万を超えるタスクが生成され、重大なオーバーヘッドが発生しました。

根本原因: この問題は、Entity Framework 6 の非同期実装のバグから発生しました。 大きなバイナリ列を含むテーブルを扱う場合、フレームワークは非同期呼び出しで CommandBehavior.SequentialAccess フラグを自動的に利用する必要があります。 この重要な最適化が欠落していました。

解決策: 著者は、Entity Framework の組み込みの非同期メソッドをバイパスすることを提案しています。 TaskCompletionSource を使用した回避策により、手動での非同期実行が可能になり、大規模なバイナリ データを含むテーブルに CommandBehavior.SequentialAccess が正しく適用されるようになります。

主な所見:

  • Ado.Net は、大きなバイナリ列と CommandBehavior.Default.
  • を含むテーブルに対する非同期操作でも同様のパフォーマンスの低下を示します。
  • パフォーマンスの違いは、大きなバイナリ列 (著者のテストでは 256 KB) で最も顕著でした。
  • CPU 使用率のパターンは異常でした。同期操作では CPU が 12% 使用されたのに対し、非同期操作は 20% に達し、潜在的なリソース競合を示唆していました。

以上がEntity Framework の非同期操作が同期操作よりも 10 倍遅いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート