Entity Frameworkで問題が発生しており、非常に単純なオブジェクト挿入で初めてSaveChangesを実行すると、2〜4秒の遅延が発生します。これを(ANTS Performance Profilerを介して)ビュー生成に絞り込みました。EdmGenまたはT4テンプレートを使用してビューを事前生成するための記事を見て、それに従いましたが、これは役に立ちません。.Views.csファイルにはSELECTステートメントのみが含まれ、UPDATEまたはINSERTステートメントは含まれていません。プリコンパイルされたクエリ、キャッシュされたクエリなどを使用したEFとパフォーマンスについては多くの議論がありましたが、すべてSaveChanges()の背後に隠されている挿入や更新ではなく、選択を中心にしています。
EFにINSERTビューを生成させる唯一の方法は、サービスの起動時に、存在してはならないIDに外部キーを設定するなど、失敗することがわかっている行を挿入しようとすることです。これは私には絶対にばかげているようです。もっと良い方法はありますか?コンパイル時とサービスの起動時のどちらで発生するかは気にしませんが、EFにすべての(基本的な)UPDATEビューとINSERTビューを生成させる方法はありますか?サービスの最初のユーザーが単一の行を挿入するのを2〜4秒待つことは受け入れられません。
現在EF4を使用していますが、この問題を解決するために、必要に応じてEF5と.NET4.5にジャンプします。
編集:さらに調査したところ、更新ビューの作成/コンパイル中にテーブルでSaveChanges()が最初に呼び出されたときにオーバーヘッドが発生しましたが、無視できることがわかりました(30〜40ミリ秒)。プロファイリングを行うと、コールスタックが膨大なためよりも見栄えが悪くなります。2〜4秒の元のタイミングは、次のような他のオーバーヘッドに分割されました。最初のコンテキストの作成:1600ms最初のEF操作(クエリビューをロードまたは作成する)プリコンパイルされている場合は400ms、それ以外の場合は3000 + msリモートデータベースへの初期接続:500ms