0
데이터베이스에서 읽은 일련의 bool 값을 기반으로 조회를 수정하는 함수를 만들려고합니다.성능이 매우 낮은 수정 조회
IEnumerable<RootDomain> lookup = db.RootDomains;
//bools are nullable
if (conditions.HasCompanyMatch == true) lookup = lookup.Where(x => x.Companies.Any(c => c.CompanyMatches.Count > 1));
if (conditions.HasCompanyMatch == false) lookup = lookup.Where(x => !x.Companies.Any(c => c.CompanyMatches.Count > 1));
if (conditions.HasEmail == true) lookup = lookup.Where(x => x.EmailMessages.Count() > 1);
// etc.. more bool switches
//very slow when it enumerated in any way
var count = lookup.Count();
그것은 작동하지만 그것은 매우 느린 :
나는 다음과 같은 접근 방식을 복용했습니다. 열거 형 조회가 열거 될 때 RAM 사용량은 최대 약 800MB로 점프되며 몇 분이 걸리는 반면 한 번에 모두 수행하면 단 몇 초만 소요되고 램은 60MB와 비슷합니다.나는 이렇게하는 것이 재귀적인 쿼리를 추가한다고 가정하고 있지만 잘 모르겠습니다.
성능을 저하시키지 않고이를 달성하는 올바른 방법은 무엇입니까?
"반면이 걸리는 : 난 당신이 데이터 (예를 들어, 당신의 수를) 검색 할 갈 때 그것은 단지 평가해야한다는 것을 의미한다을 IQueryable로 초기 조회를 치료하는 생각
몇 초 "- 그렇게했을 때 사용한 코드를 보여줄 수 있습니까? –
'lookup = db.RoodDomains.Where (...) .Where (...) .Where (...)'와 같이 if 문을 사용하지 않고 수행하는 것을 의미합니다. – Guerrilla
이것이 SQL 서버라고 가정하고 프로파일 링 도구를 사용하여 생성되는 SQL을 조사해 보셨습니까? –