21

미리 컴파일 된 뷰없이 코드 우선 전략과 함께 EF6 rc1을 사용하고 있습니다. 문제는 다음과 같습니다. exe ​​응용 프로그램을 컴파일하고 실행하면 첫 번째 쿼리를 실행하는 데 15 초 (괜찮습니다. 미리 생성 된 뷰에서 계속 작업 중이므로). 내가 첫 번째 쿼리 실행하기 전에 거의 2 분 소요 동일한 응용 프로그램을 디버깅 비주얼 스튜디오 2013 미리보기를 사용한다면 :EF6/코드 첫 번째 : 첫 번째 쿼리에서 Super가 느려지지만 디버그에서만 발생

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'프로세스가 있음을 알게되었습니다. 더 구체적으로 말하자면 'Thread Exit'로 시간 소모. 스레드 종료 스택을 36 번 반복합니다. 이 정보가 매우 유용 할 지 모르겠지만 스택과 함께 '.cvs'를 저장했습니다. 그의 시체는 다음과 같습니다. [...] (편집 : '.cvs'본문이 제거되었으므로 다시 게시 할 수 있습니다. 누군가가 실제로 유용하다고 생각한다면 의견에 의해 혼란스럽고 너무 컸습니다.)

편집 : 설치된 VS2013 Ultimate 및 Entity Framework 6 RTM. Entity Framework Power Tools Beta 4를 설치하고 뷰를 생성하는 데 사용했습니다. 아무 것도 바뀌지 않았습니다 ... 만약 내가 exe를 실행하면 20 초가 걸릴 것입니다. 디버깅을 시작하면 120 초가 걸릴 것입니다.

편집 : 오류를 시뮬레이트하는 작은 프로젝트를 만들었습니다. http://sdrv.ms/16pH9Vm 환경 내에서 프로젝트를 실행하고 .exe를 통해 직접 실행하고 버튼을 클릭하고 로딩 시간을 비교하십시오.

+0

이 .. 나는 그들이 EF6 그것을 해결하기 위해 줄 알았는데 꽤 많은 시간 동안 EF을 괴롭힌 일반적인 문제입니다 만 아마 .. 한 가지의 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

감사합니다.이 버그는 답변으로 표시하고 codeplex 작업 항목을 추적합니다. –

+2

이 패치는 여전히 성능 문제가 있습니다. –

-1

모르겠어요. 그러나 제 경우에는 다른 제안을 시도한 후 1 주일 가까이 나를 낭비하는 유사한 문제가있었습니다. 마지막으로, web.config를 optimizeCompilations = "true"로 변경하여 솔루션을 찾았으며 성능이 15-30 초에서 약 2 초로 크게 향상되었습니다.

관련 문제