誰か説明してくれませんか
- DbContext.SaveChanges の実行がデバッグ モードで実稼働モードよりも 10 倍遅いのはなぜですか?
- これをスピードアップする方法はありますか?
デバッグ モードでは、Web ページの読み込みに 116 秒かかりますが、デバッグせずにプロジェクトを開始すると 15 秒かかります。
トレース ステートメントを設定したところ、デバッグ モードの場合、116 秒のうち 100 秒が DbContext.SaveChanges メソッドで費やされていることがわかりました。
デバッグなしでプロジェクトを実行すると、同じセクションで 7 秒しか費やされませんでした。
詳細情報が必要な場合は、コメントでお知らせください..
プロジェクトのセットアップ:
- ASP.NET Web ページ
- VS2012
- SQLServer2012
- エンティティ フレームワーク 5.0
追加情報: (さらに必要な場合はコメントでお知らせください)
- SaveChanges メソッドに対する SQL クエリの累積数は 20,000 です
- 運用接続文字列: データ ソース=PC-DEV;初期カタログ=aspnet-2013-06-04;統合セキュリティ=True;MultipleActiveResultSets=True;アプリケーション名=EntityFrameworkMUE
- デバッグ接続文字列: データ ソース=PC-DEV;初期カタログ=aspnet-2013-06-04;統合セキュリティ=True;MultipleActiveResultSets=True;アプリケーション名=EntityFrameworkMUE
- また、バッキング データベースとして LocalDB を使用した場合と同じ相対的なパフォーマンスを経験しました。
アップデート:
@ruionwriting が示唆したように、データベースのプロファイリングを行ったところ、プロジェクトがデバッグ モードでもプロダクション モードでも、約 20,000 の sql コマンドにまったく同じ時間がかかることがわかりました。(コマンドごとに 0 ミリ秒)。
ただし、20,000 コマンド間の平均絶対時間差は、デバッグ モードで 5 ミリ秒です。
本番モードとは対照的に、一連のコマンドの平均時間差は 0.3 ミリ秒です。
これは約 10 倍の時間のパフォーマンスの違いであり、エンティティ フレームワークをデバッグ モードで余分な時間がかかっているものとして分離します。
デバッグ フラグなしで EntityFramework を参照できるようにデバッグ ビルドを構成する方法はありますか?
また、何らかのコンパイラー マジックを使用して何らかの方法でパフォーマンスを元に戻した場合、デバッグ機能に関して何を失うことになるでしょうか? 現在、エンティティ フレームワークのコードに踏み込むことはできないので、見逃すことはないと思います。
ありがとう!