2


非常に興味深いページを見つけました: http://msdn.microsoft.com/en-us/library/cc853327.aspx

ここでは、クエリ ステージ中に、「ビューの生成」という名前のステージがあり、多くのコストがかかることがわかります。EF はそれを事前にコンパイルする方法を提供していますが、事前にコンパイルしていないクエリが多数ある場合でも、問題が発生する可能性があります。

方法: ビューを事前に生成してクエリのパフォーマンスを向上させる方法については、http: //msdn.microsoft.com/en-us/library/bb896240.aspxを参照してください。

ここでは、事前生成なしのクエリは 2 倍の時間がかかることがわかります。つまり、かなりの費用がかかるということです。http://blogs.msdn.com/b/appfabriccat/archive/2010/08/06/isolating-performance-with-precompiled-pre-generated-views-in-the-entity-framework-4.aspx

質問があります。なぜ EF はこのステージを設計するのですか? また、NHibernate にもこのステージはありますか? 本当なら、Nhibernate でのパフォーマンスはどうですか?

4

1 に答える 1

3

EFビューはSQLビューとは何の関係もありません-EFビューは、実行可能コードにコンパイルされた変換をマッピングしています。EFはこれらの変換を使用して、クエリ表現をターゲットSQL表現に変換します。このコンパイルの理由は、アプリケーション全体のパフォーマンスです。初期化に時間を費やす必要がありますが、後続のすべてのクエリと更新では、EDMでのルックアップではなく、コンパイルされたコードが使用されます。実行時にマッピングを変更する必要がない場合は、アプリケーションのコンパイル中にこれらのビューを事前にコンパイルすることもできます。

EFビューはクエリの準備(ある表現を別の表現に変換する)に使用されますが、クエリの準備は一意のクエリごとに実行する必要があります。EF 4では、コンパイル済みクエリを手動で使用しない限り、この準備はキャッシュされません。EF 4.5および5.0(.NET 4.5)では、すべてのクエリが自動的に「コンパイル」されます=キャッシュがあり、それぞれの一意のクエリは実際には1回だけ準備されます。その後の同じクエリの実行では、キャッシュからコンパイルされたバージョンが使用されます。

パフォーマンスとEF5.0の詳細については、この初心者向けガイドをご覧ください。

于 2012-08-02T08:19:13.763 に答える