2012-12-25 2 views
-1

다른 유형의 오브젝트 세트 엔티티를 삭제하지 않고도 부품 또는 어쩌면 전체 오브젝트 세트를 해제 (분리)하는 매우 빠른 방법을 찾고 있습니다.엔티티 프레임 워크 - 이전에로드 된 엔티티가없는 메모리

이 시나리오에서는 주요 objectcontext와 함께 많은 개체 세트를 사용합니다. 테이블 중 일부는 우리가 메모리에 완전히로드 할 그나마 미래의 데이터, 매우 많은 양의 것입니다. 작년 데이터 만 시작 필터로로드되고 사용자가 원하는 경우 필터를 다른 것으로 변경할 수 있습니다. 필터링 부분은 쉽게 작동하지만 이전에로드되지 않은 항목 만 필터에로드하면 이전 항목은 objectcontext에 의해 메모리에 보관됩니다. 1-2000 개의 항목을 분리하면 매우 빠른 컴퓨터에서 4-5 초가 걸릴 수 있습니다. 저에게조차 받아 들일 수없는 것, 특히 그 번호는 단 하나의 필터 변경으로 40000 이상이 될 수 있습니다.

답변

2

Entity Framework가 사용되도록 설계되었으므로이 설정은 문제가되지 않습니다.

EF는 수명이 짧은 객체의 컨텍스트를 갖도록 설계되었다. 각 작업에 대한 컨텍스트를 만들고 작업이 완료되면 파기합니다. 웹 앱처럼 데스크톱 애플리케이션에서는 그리 좋지는 않지만 오브젝트 컨텍스트를 오랜 시간 동안 유지하는 것은 나쁜 생각입니다.

오랜 기간 동안 컨텍스트를 유지함으로써 얻는 것은 거의 없습니다.

EF에는 개체 그래프에서 개체를 제거 할 수있는 기능이 없습니다. 작업을 완료했을 때 상황을 파기하도록 설계 되었기 때문입니다. 컨텍스트를 파기하면 메모리를 확보 할 수 있습니다.

+0

1. 기본적으로 "엔티티 프레임 워크와의 전투 중단". 전체 "주요 objectcontext"는 이미 큰 실수입니다. u는 각로드 동작을위한 다른 컨텍스트를 사용하는 경우 – TomTom

+0

는 U가 연결되어 두 개의 테이블이있을 때, U는 다음과 같은 문제에 대응 어떻게 : –

+0

동일한 방법 entites의 다른리스트 유 비교 엔티티보다 서로 다르다는 것을 말하는 것이다 첫 번째 목록에서; 동일한 엔티티가 여러 번로드됩니다. 예 : 장소 테이블이 국가 테이블과 연결되어 있습니다. 장소 테이블이로드되면 각 장소 항목에 대해 1 개 국가를로드하고 콤보 상자 선택 목록에 대한 전체 국가 표를로드 할 때 또는 다른 이유로 인해 전체 목록이 다시로드됩니다. –