EF6 / Code First:在第一次查詢期間超級慢,但僅在Debug中

entity-framework entity-framework-6 visual-studio-2013

我正在使用EF6 rc1與Code First策略,沒有預編譯視圖,問題是:如果我編譯並運行exe應用程序,運行第一個查詢需要15秒(這沒關係,因為我還在處理前 - 生成的觀點)。但是如果我使用Visual Studio 2013 Preview來調試完全相同的應用程序,那麼在運行第一個查詢之前需要將近2分鐘:

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的源代碼我發現了該屬性:

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

是時間消耗的地方。但這很奇怪,因為調試只需要一些時間。我在這裡錯過了什麼嗎?

編輯:找到更多與問題相關的信息:使用進程監視器(由Sysinternals)我發現它的'desenv.exe'進程耗費了大量時間。更具體地說,它是“螺紋退出”的消耗時間。它重複36次線程退出堆棧。我不知道這個信息是否非常有用,但是我用堆棧保存了一個'​​.cvs',這是他的身體:[...](編輯:刪除'.cvs'的身體,我可以​​再次發布通過評論,如果有人真的認為它將有用,但它是令人困惑和太大。)

編輯:安裝VS2013 Ultimate和Entity Framework 6 RTM。安裝了Entity Framework Power Tools Beta 4並使用它來生成視圖。什麼都沒有改變......如果我運行exe需要20秒,如果我'開始'調試它需要120秒。

編輯:創建一個小項目來模擬錯誤: http//sdrv.ms/16pH9Vm只需在環境中運行項目並直接通過.exe,單擊按鈕並比較加載時間。

一般承認的答案

在附加調試器時,這是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




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因