2009-09-15 2 views
1

WCF가 약 200 개의 테이블과 Entity Framework가 포함 된 DB 위에 구축되면 WCF를 작성한 후 처음으로 로그인을 수행하는 데 많은 시간 (약 2 분)이 소요됩니다.IQueryable Count 메서드를 실행하는 데 오래 걸림

코드를 실행하면 IQueryable.Count 메서드가 범인임을 알 수 있습니다.

이것은 WCF 코드를 작성한 후에 처음 발생합니다. Count 메서드의 연속 실행은 예상대로 빠릅니다.

어떤 이유가있을 수 있습니까? 엔티티는 코드를 다시 작성한 후에 일종의 백그라운드 캐싱을 수행합니까?

의견을 보내주십시오.

업데이트 :

@Craig :보기 또한

link의 발생 전,이 link는 또한 EF

에 대한

을 성능 개선 제안을 많이 가지고 주셔서 감사, EF에 대한 게으른로드 체크 아웃 library.

답변

5

이것은 알려진 문제인 resolved with .NET 4.0입니다.

처음 웹 기반 응용 프로그램을 실행할 때 코드를 캐시해야합니다. 그때부터, 그것은 최고 속도로 실행됩니다. 이 기사에서는 첫 번째 사용자가 서비스를 누르기 전에 코드를 미리 실행하여이 초기 속도 저하를 피하는 현재의 방법을 보여줍니다.

+0

@ TLD : 링크 해 주셔서 감사합니다! 나는 이것이 내가 직면하고있는 관련 문제를 해결할 수 있기를 바라고있다. – pencilslate

2

Lame Duck의 답변은 도움이됩니다 (최대 투표 수). 그러나 전체 내용을 설명하지는 않습니다. Entity Framework 쿼리를 처음 실행하면 몇 가지 일이 발생합니다. 하나는 뷰 생성이며, SQL은 엔티티 세트로드 및 개별 엔티티로드와 같은 일반적인 쿼리에 대해 컴파일됩니다. But view generation can also be done at compile time은 첫 번째, 불행한 사람에게이 단계의 성능 오버 헤드를 쿼리를 저장하는 것을 저장합니다. 이 단계는 새 ObjectContext가 초기화 될 때마다 반복되므로 컴파일 타임에 뷰 생성을 수행하는 작은 오버 헤드가 런타임에 큰 효과를냅니다. 두 번째는 Iqueryable을 CompiledQuery으로 최적화 할 수있는 표준 명령 트리로 컴파일하는 것입니다. 이러한 문제 중 하나 또는 둘 모두에 직면 할 수 있으므로 .NET 3.5 SP 1 문제로이 문제를 작성하기 전에 해당 문제를 확인해보십시오.

관련 문제