21

コードファースト戦略でEF6 rc1を使用しています。コンパイルされたビューを使用せずに問題があります。 exeアプリケーションをコンパイルして実行すると最初のクエリを実行するのに15秒(私はまだ事前生成されたビューで作業しているので、大丈夫です)。私は最初のクエリ実行する前に、それはほとんど2分かかり、まったく同じアプリケーションをデバッグするためのVisual Studio 2013プレビューを使用している場合でも:EF6/Code First:最初のクエリでは、最初のクエリではスローが遅いですが、デバッグ時にのみ

Dim Context = New MyEntities() 
Dim Query = From I in Context.Itens '' <--- The debug takes 2 minutes in here 
Dim Item = Query.FirstOrDefault() 

をこの余分な時間を削除する方法はありますか?私はここで何か間違っていますか?

Ps .:コンテキスト自体は複雑ではなく、200以上のテーブルで完全です。

編集:デバッグ時間中に、EFが事前生成されたものを無視してビューを生成しているように見えることが判明しました。 EFからソースコードを使用して 私は、プロパティことを発見:時間が消費されている場所

IQueryProvider IQueryable.Provider 
    { 
     get 
     { 
      return _provider ?? (_provider = new DbQueryProvider(
               GetInternalQueryWithCheck("IQueryable.Provider").InternalContext, 
               GetInternalQueryWithCheck("IQueryable.Provider").ObjectQueryProvider)); 
     } 
    } 

です。しかし、これはデバッグで時間がかかるだけなので奇妙です。私はここに何かを逃していますか

編集:質問に関連する詳細情報が見つかりました: Process Monitor(Sysinternals社)を使用すると、時間が掛かっている「desenv.exe」プロセスが見つかりました。より具体的には、「スレッド出口」を使用して時間を消費することです。スレッド出口スタックを36回繰り返します。私はこの情報が非常に有用かどうかはわかりませんが、スタックで '.cvs'を保存しました。ここに彼の体があります:[...](編集: '.cvs'本体を削除しました。誰かが実際に役に立つと思っているとコメントしても、混乱しすぎて大きすぎます)

編集:VS2013 UltimateとEntity Framework 6 RTMがインストールされました。 Entity Framework Power Tools Beta 4をインストールし、それを使用してビューを生成しました。何も変更されていません...もし私がexeを実行すると、20秒かかります。

編集:エラーをシミュレートする小さなプロジェクトを作成しました:http://sdrv.ms/16pH9Vm 環境内でプロジェクトを実行し、直接.exeを実行してボタンをクリックし、読み込み時間を比較してください。

+0

これはかなりの時間のためにEFを悩ませてきた共通の問題で、私は彼らがEF6でそれに対処するつもりだったと思った..しかし、多分.. EF6が提供することの一つは、あなたのモデルを分割する機能ではありませんあなたのベスト・ベットになる可能性のある複数のモデルに変換します。 –

+0

http://entityframework.codeplex.com/wikipage?title=ultiantant%20migrations –

+0

複数のコンテキストでの中断は何も変更しませんでした。すべてのコンテキストは 'ルール'に従っているので、ロードするまではロードするのにほぼ同じ時間がかかりますが、それらの間には多数の外部キーがあるため、すべてロードする必要があります。 –

答えて

12

これは、デバッガが接続されているときにLazy(EFが使用している)のパフォーマンス上の既知の問題です。私たちは現在、修正に取り組んでいます(私たちが見ている現在のアプローチは、Lazyの使用を取り除くことです)。パッチのリリースですぐにこの修正プログラムをリリースしたいと考えています。この問題の進捗状況は、CodePlexサイトhttp://entityframework.codeplex.com/workitem/1778で追跡できます。修正が含まれる予定来6.0.2パッチリリースの

詳細はここにある - http://blogs.msdn.com/b/adonet/archive/2013/10/31/ef6-performance-issues.aspx

+0

ありがとう、これは私が答えとしてマークし、コードプレックスの作業項目を追跡する既知のバグですので、ありがとうございます。 –

+2

このパッチはまだ私にとってパフォーマンスの問題があります。 –

-1

あなたが解決策を見つけた場合、私は知りません。しかし、私の場合、私は同じ提案を試みた後、1週間近く近く私を無駄にした問題を抱えていました。最後に、web.configをoptimizeCompilations = "true"に変更し、パフォーマンスを15〜30秒から約2秒に大幅に改善して解決策を見つけました。

関連する問題