2009-12-04 7 views
2

SQL Server 2008 데이터베이스에 레이어를 적용하기 위해 Entity Framework를 사용하고 있습니다. EF는 내 웹 서비스에 있고 웹 서비스는 Silverlight 클라이언트에 의해 호출됩니다.엔터티 프레임 워크 성능

EF에서 실행되는 쿼리의 실행 기간에 심각한 성능 문제가 있습니다. 이것은 연속적인 호출에서 발생하지 않습니다.

약간의 인터넷 검색 결과에 따르면 앱 도메인별로 db 개체의 메모리 내 모델이 생성됩니다. 성능 향상을 위해 뷰 생성 전을 설명하는 Microsoft link을 발견했습니다. 단계를 구현 한 후에도 성능은 실제로 향상되는 대신 성능이 저하됩니다. 누군가가이 접근 방식을 성공적으로 시도하고 성능 향상을위한 다른 방법이 있다면 궁금합니다.

.NET 3.5를 사용 중입니다.

+0

Entity Framework 때문에 또는 쿼리 자체 때문에 속도가 느린지를 프로파일 링하고 결정 했습니까? –

+0

@Chris : 아니, 그렇지 않다. 포인터 좀 던져 주실 래요? – pencilslate

답변

2

몇 지역은 EF의 성능을보고

  1. 는 tolist 등을 호출하기 전에 처리의 정도를 수행합니다(). ToList는 세트의 모든 것을 메모리로 가져옵니다. 기본적으로 EF는 표현식 트리를 계속 만들고 메모리에 데이터가 필요할 때 실제로 처리합니다. 첫 번째 쿼리는 데이터베이스에 대한 것이지만 나중에는 처리가 메모리에 저장됩니다. 대용량 데이터로 작업 할 때는 가능한 한 많은 작업을 데이터베이스에서 수행해야합니다.
  2. EF 1에는 전체 행을 다시 가져올 수있는 옵션 만 있습니다. 따라서 큰 문자열 또는 이진 BLOB 인 열이있는 경우 필요에 따라 열거되고 메모리에 저장됩니다. 이 열은 포함하지 않은 프로젝션을 만들 수 있지만 엔티티가되는 이점을 얻지 못합니다.
  3. 당신은 How do I view the SQL generated by the Entity Framework?
2

일반 SQL에서와 마찬가지로 EF 쿼리에도 동일한 물리 법칙이 적용됩니다. 데이터베이스 테이블을 점검하고 기본 및 외래 키에 대한 색인, 데이터베이스가 올바르게 표준화되었는지 등을 확인하십시오. Microsoft의 제안에 따라 성능이 저하되는 경우 문제 지역에 대한 추측입니다.

0

데이터를 검색하기 위해 실행 된 쿼리 수를 확인하려면 SQL 프로필러를 사용하십시오. Include() 메서드가 ObjectQuery 인 경우 하나의 쿼리에서 상위 개체를 검색 할 수 있습니다.

1

당신이 IIS에서 웹 서비스를 호스팅하는이 게시물의 제안을 사용하여 EF에 의해 생성 된 SQL을 볼 수 있습니다? 실버 라이트 앱과 동일한 사이트에서 실행되고 있습니까? 데이터베이스 자체는 어떻습니까? 전용 컴퓨터에서 실행되고 있습니까? 거기에 다른 애플 리케이션을 치고 있습니까? 휴면 데이터베이스에 대한 첫 번째 호출은 고통 스럽습니다 (실제로 환경에서 시간 초과되는 상황이있었습니다).

여기에 고려해야 할 여러 가지 요소가 있습니다. 그러나 그것은 EF의 오버 헤드 이상으로 떨어집니다.

편집 데이터 액세스 솔루션에 관계없이 SQL Server에 대한 첫 번째 연결을 여는 프로세스가 느립니다.

+0

@Mike : 현재 동일한 컴퓨터에서 SQL Server가 설치된 테스트 베드 IIS 환경에서 실행 중입니다. EF에서 실행되는 ToList 메소드를 실행하는 데 약 2 분이 걸립니다.다른 포인터를보고 나에게 제안 해 주겠습니까? – pencilslate

+0

나는 그것이 문제가 아니라고 말할 것이다. 그러나 한 경로는 자체 호스팅 WCF 서비스를 사용하고 클라이언트 호출을하기 전에 서비스가 SQL Server와의 통신이 이미 설정되어 있도록 시작할 때 간단한 루틴을 호출하게하는 것입니다. 여기서 중요한 문제는 동일한 컴퓨터에서 테스트한다는 것입니다. 생산 기계에서 문제가 발생하면 해결할 가치가 있습니다. 그러나 그것을 완화 할 수있는 방법이 있습니다. –

관련 문제