컨텍스트 자체는 많은 메모리를 차지하지 않으므로 using() 블록을 사용하는 경우 처리해야합니다. 더 큰 문제는 엔티티의 목록을 반환하는 것입니다. 서버는 요청을 처리하기 위해 메모리를 할당하고 요청이 완료 되 자마자 해당 메모리를 해제하지 않습니다. 데이터는 가비지 수집으로 이동하지만 IIS에 할당 된 예약 된 메모리는 다시 톱니가 끊어지지 않습니다. 문제는 단일 요청이 많은 메모리를 꽤 빨리 요구할 수 있다는 것을 보여줍니다.
이 서버 콜백이 있다면, 당신은 표시 할 말은 단지 데이터에 특정 ALL 기타 사항 서보 -OFF() 귀하의 기관에서 해당 데이터를 뷰 모델을 정의 고려하고보기 모델의 목록을 반환합니다. 웹 API 메소드에 대해서도 마찬가지이며 DTO가 필요한 데이터 만 반환하도록 정의합니다.
var answers = ctx.Answers
.Select(a => new AnswerViewModel
{
AnswerId = a.AnswerId,
AnswerText = a.AnswerText,
AnswerTypeName = a.AnswerType.Name, // For example, getting values from child references...
}).ToList();
반환 실체는보기의 성능과 메모리 사용 지점 모두에서 매우 비효율적이 될 것입니다, 플러스 당신이 DbContext의 범위를 벗어난 참조를 사용하려고하면 쉽게 게으른 로딩 문제로 실행할 수 있습니다. (범위 내에서 참조 할 경우 성능 문제가 있음)
너무 많은 행을로드하지 않으려면 .Where() 절을 사용하여 데이터를 필터링하고 데이터 크기가 크게 커질 수있는 길을 고려해야합니다. 사용자의 수는 그들 모두를 요청할 수있는 능력을 가지고있는 2M 응답 기록이 끝나는 때문에 서버가 중단 갈기 곳 상황을 피하기 위해 행 제한 또는 페이징을 지원하는 것이 좋습니다. 그 외에는
, 이것은 성능 비용을 가지고 같은 요청에 따라 생성되는 여러 상황을 확인합니다. 이 MVC에 통합 될 수 있으며, 단 하나의 인스턴스가 요청에 따라 생성되어 있는지 확인하는 작업 래퍼는 A DbContext의 범위 또는 단위를 관리 할 수있는 나는, Autofac와 같은 IOC의 용기에 독서 권 해드립니다.