2012-10-02 4 views
2

매우 간단한 개체 삽입시 SaveChanges를 처음 실행하는 Entity Framework에 문제가 있습니다. 2-4 초의 지연이 있습니다. 나는 ANTS Performance Profiler를 통해 View Generation으로 이것을 좁혔다. 나는 EdmGen 또는 T4 template으로 미리보기 생성에 대한 기사를보고 따라 갔지만 도움이되지 않습니다. .Views.cs 파일에는 UPDATE 또는 INSERT 문이 아닌 SELECT 문만 포함되어 있습니다. 미리 컴파일 된 쿼리, 캐시 된 쿼리 등을 사용하여 EF 및 성능에 관한 많은 논의가 있었지만, 모두 SaveChanges() 뒤에 숨어있는 삽입이나 업데이트가 아닌 선택을 중심으로 이루어졌습니다.Entity Framework에서 INSERT/UPDATE 뷰를 미리 생성합니다.

EF에서 INSERT 뷰를 생성하는 유일한 방법은 절대로 존재하지 않아야하는 ID에 외래 키를 설정하는 것과 같이 실패 할 것으로 예상되는 서비스 시작시 행을 삽입하는 것입니다. 이것은 나에게 절대적으로 우스운 것처럼 보인다. 더 좋은 방법이 있습니까? 컴파일 시간이나 서비스 시작 시점에서 실제로 발생하는지는 신경 쓰지 않지만 EF가 모든 (기본) UPDATE 및 INSERT 뷰를 생성하도록 강제하는 방법이 있습니까? 서비스의 첫 번째 사용자가 한 행을 삽입하는 데 2-4 초 정도 기다리는 것은 허용되지 않습니다.

우리는 지금 EF 4를 사용하고 있지만이 문제를 해결하려면 필요한 경우 EF 5 및 .NET 4.5로 점프 할 것입니다.

편집 : 추가 조사는 무시할 (30-40ms)이고, 오버가하면서/생성 업데이트보기를 컴파일하는 동안 처음 SaveChanges를()가 테이블이라는 것을 보여 주었다. 그것을 프로파일 링하는 것은 커다란 호출 스택으로 인한 것보다 더 나빠 보이게 만듭니다. 원래의 2-4 초 타이밍은 다음과 같은 다른 오버 헤드로 분해되었습니다. 첫 번째 컨텍스트 만들기 : 1600ms 첫 번째 EF 작업 (쿼리 뷰를로드하거나 생성 함) 미리 컴파일 된 경우 400ms, 그렇지 않으면 3000 + ms 원격으로의 초기 연결 데이터베이스 : 500ms

답변

0

더 자세히 조사하면 업데이트보기를 생성하는 데 걸리는 시간이 다른 오버 헤드에 비해 무시할 만하며 특별한 처리가 필요 없습니다.

관련 문제