최근 엔 4.1을 사용하는 ObjectContext에서 5.0을 사용하는 DbContext로 엔티티 모델을 옮겼습니다. 나는 DbContext 대 ObjectContext를 사용하는 질의에 대해 매우 열악한 성능을 느꼈기 때문에 그 일을 후회하기 시작했습니다. 테스트 시나리오는 다음과 같습니다.DbContext 질의 성능이 좋지 않거나 ObjectContext가 됨
두 컨텍스트 모두 약 600 개의 테이블과 동일한 데이터베이스를 사용합니다. LazyLoading 및 ProxyCreation은 두 가지 모두 해제되어 있습니다 (코드 예제에서는 표시되지 않음). 둘 다 미리 생성 된보기를 가지고 있습니다.
는시험은 먼저 메타 데이터 작업 공간을로드 한 호출합니다. 그런 다음 for 루프에서 100 번 실행되면 컨텍스트를 새로 작성하고 처음 10 초가 걸리는 한 번의 호출을 작성합니다. for 루프 내부에 컨텍스트를 작성합니다. WCF 서비스에서이 컨텍스트를 사용하므로이 컨텍스트가 작성됩니다. 컨텍스트마다 매번)
이 작업을 ObjectContext와 함께 실행하면 약 4.5 초가 걸립니다. DbContext를 사용하여 실행하면 약 17 초가 걸립니다. RedGate의 성능 프로파일 러를 사용하여 프로파일 링했습니다. DbContext의 경우 주요 원인은 UpdateEntitySetMappings라는 메서드입니다. 이것은 모든 쿼리에서 호출되며 메타 데이터 워크 스페이스를 검색하고 OSpace의 모든 항목을 순환합니다. AsNoTracking이 도움이되지 않았습니다.
편집 : 더 좋은 내용을 제공하기 위해, 문제는 ObjectSet을 대 DbSet의 생성 \ 초기화가 아닌 실제 쿼리를 함께 할 수있다. ObjectContext를 사용하여 호출하면 ObjectSet을 만들기 위해 평균 42ms가 소요됩니다. DbContext로 전화를 걸면 내부 dbset을 생성하는 데 약 140ms가 걸립니다. ObjectSet과 DbSet은 모두 메타 데이터 공간에서 개체 세트 매핑 조회를 수행합니다. DbSet은 ObjectSet이 작동하지 않는 동안 작업 공간의 모든 유형에 대해 DbSet을 수행한다는 것을 알았습니다. 성능 차이가 적은 테이블이 적은 모델을 추측하고 있습니다 (시도하지 않았습니다).