2013-04-30 2 views
3

EF 5.0 및 WCF Data Services를 사용하여 데이터 액세스 루틴을 테스트하는 동안 성능 문제가 발생했습니다. 나는 WCF 데이터 서비스 조작 내에서 다음과 같은 간단한 쿼리를 실행하고 : 만 500 개 기록을 촬영하면검색된 레코드 수가 기하 급수적으로 증가하면 linq 쿼리 기간이 늘어납니다.

var addresses = (from address in context.Addresses select address).Take(500); 
var addressList = addresses.ToList(); 

는, 쿼리 시간은 약 300 밀리 초입니다. 1000 개의 레코드를 가지고 쿼리 시간은 4 초입니다. 2000 개의 레코드 쿼리 시간은 24 초입니다. 약 6000 개의 레코드를 가지고 쿼리 시간은 360 초 이상입니다.

SQL Server Management Studio에서 EF에 의해 생성 된 SQL 문을 실행할 때 6000 레코드 쿼리는 본질적으로 즉시 발생합니다.

이 성능 문제를 해결하기 위해 어떤 설정을 구성 할 수 있습니까?

+0

당신이 당신의'DbQuery' 당신 때문에 돈에'.AsNoTracking을()'호출을 시도 할 수 'ObjectStateManager'의 오버 헤드가 없습니다. –

답변

1

읽기 전용 연산 (예 : 눈금으로 표시)입니까, 아니면 데이터베이스에서 검색중인 엔티티를 업데이트해야합니까?

엔터티를 업데이트 할 필요가없는 경우 .AsNoTracking() 메서드를 사용해야합니다. 즉, 엔터티 프레임 워크가 엔터티의 변경 내용을 추적하지 않습니다. 이런 식으로 뭔가를 시도 :

var addressList = context.Addresses.AsNoTracking().Take(500).ToList(); 

추천 도서 : 당신이 다음 변경 내용 추적이 필요하지 않은 경우

Entity Framework and AsNoTracking

+0

답장을 보내 주셔서 감사 합니다만 AsNoTracking을 사용하면 쿼리 실행 시간에 별다른 영향을 미치지 않습니다. 과도한 시간은 EF 또는 WCF 데이터 서비스의 일부 제한된 리소스로 인해 발생한다고 저는 믿습니다. 그러나 어떤 것들이 어떻게 재구성되는지는 알지 못합니다. –

+0

루이, 나는 착각했다. 나는 AsNoTracking으로 내 테스트를 다시했고 2000 레코드는 14 밀리 초 밖에 걸리지 않았다. 당신의 도움을 주셔서 감사합니다. –

+0

도와 드릴 수있어서 기쁩니다. 내 대답이 유용하다고 생각되면 정답으로 표시하거나 upvote하십시오. 감사 –

관련 문제