2013-01-02 2 views
2

ASP.NET 웹 응용 프로그램을 프로파일 링하는 중이고 EF4 실행 계획이 캐시되지 않는 것을 알고 있습니다. 페이지가로드 될 때마다 아래의 스크린 샷과 같이 모든 Linq 표현식이 다시 컴파일됩니다.Entity Framework 4를 사용하여 캐시 Linq에서 엔터티 실행 계획

dotTrace

나는이 실행 계획을 캐시 EF4을 알 수있는 방법이 있습니까?

편집이 :

이것은 내 쿼리가 어떻게 생겼는지 :

var objs = db.Table 
    .Include("OtherTable") 
    .Where(g => 
     (someId != null || g.ID == someId) && 
     (g.ObjType == someType) && 
     (/* etc */)) 
    .ToList(); 

답변

2

Query Plan Caching를 살펴 보자. 쿼리가 비효율적으로 생성되면 캐싱되지 않을 수 있습니다.

또한 각 실행 계획은 응용 프로그램 도메인별로 캐시됩니다. 따라서 ASP.Net에서 AppPool과 동일합니다. AppPool이 종료되거나 다시 시작되면 캐시가 지워집니다.

+0

귀하의 링크가 내 사례에 적용되는지 모르겠습니다. 내가 직접 SQL을 쓰는 것은 아니다. 내 질문을 일부 코드로 업데이트했습니다. – lzm

+0

링크가 적용되는 이유는 무엇입니까? 동적 쿼리의 컨텍스트에서 원시 SQL에 대해서만 설명합니다. 나머지는 Linq-to-Entities에 적용됩니다. –

+0

+1 캐시가 지워지는 경우에도 [캐시 제거 (part 3.2.2)] (http://msdn.microsoft.com/en-us/data/hh949853)에 캐시가 800 항목 – FRoZeN

관련 문제