Entity Framework에서 흥미로운 성능 문제가 있습니다. 나는 Code First를 사용하고있다.Entity Framework 성능 문제
책이 많은 리뷰를 가질 수 있습니다 : 여기
내 기관의 구조입니다. 검토는 하나의 장부와 연관되어 있습니다. 검토는 하나 이상의 의견을 가질 수 있습니다. 댓글은 하나의 리뷰와 연결됩니다.public class Book
{
public int BookId { get; set; }
// ...
public ICollection<Review> Reviews { get; set; }
}
public class Review
{
public int ReviewId { get; set; }
public int BookId { get; set; }
public Book Book { get; set; }
public ICollection<Comment> Comments { get; set; }
}
public class Comment
{
public int CommentId { get; set; }
public int ReviewId { get; set; }
public Review Review { get; set; }
}
데이터를 많이 채우고 적절한 인덱스를 추가했습니다. 이 쿼리를 사용하여 10,000 개의 리뷰가있는 책 한 권을 검색하려고합니다.
var bookAndReviews = db.Books.Where(b => b.BookId == id)
.Include(b => b.Reviews)
.FirstOrDefault();
이 특정 책은 10,000 개의 리뷰가 있습니다. 이 쿼리의 성능은 약 4 초입니다. SQL Profiler를 통해 똑같은 쿼리를 실행하면 시간이 전혀 걸리지 않습니다. 같은 쿼리와 SqlDataAdapter 및 사용자 지정 개체를 사용하여 데이터를 검색했으며 500 밀리 초 미만으로 발생했습니다.
개미 성능 프로파일 러를 사용하여 몇 가지 다른 일을 소요되는 시간의 대량 같습니다
이 방법은 5000 만 번 호출되고 같음.
누구에게도이 5 천만 번을 전화해야하는 이유와 내가이 성능을 향상시킬 수있는 방법을 알고 있습니까?
실제로 쿼리가 생성 한 쿼리를 보았습니까? 아니면 최적의 쿼리라고 가정하고 있습니까? –
EF 프로파일 러를 사용해보십시오. –
문제는 내가 설명한 것처럼 아닙니다. EF가 생성하는 정확한 쿼리를 가져 와서 같은 ADO.net을 사용하는 SQL 데이터 어댑터에서 사용했습니다. 동일한 개체를 수동으로로드했습니다. 그것은 1 초 이내에 실행됩니다. – Dismissile