2011-01-17 2 views
0

복잡한 기준에 따라 데이터 집합을 필요로 할 때 최상의 성능을 얻게되는 결과는 무엇입니까? 두 가지 선택이 있습니다 : 복잡한 ICriteria 또는 Session.Linq 문을 만들거나 LINQ를 루트 개체에서 사용하고 Hibernate가 지연로드를 처리하도록합니다. (세션을 사용하여)NHibernate 성능 : Session.Criteria와 LINQ 메모리 내

옵션 1 :

var result = Session.Linq<Contractor>().Where(contractor => contractor.account == "[email protected]) 
//.... 
.Where(condition => condition.Orders.Any(condition)) 
//... more conditions 

옵션 2 (큰 결과 집합은 SQL 서버에서 가져온된다는 것을 의미 할 수 있습니다 조회 "에서 메모리"할 수있는 사용의 루트 개체) : 변형이 NHPRof에서 경고를 생성하지 않습니다에 메모리

var contractor = Session.Linq<Contractor>().Single(c => c.Id == 1); 

contractor.Orders.SelectMany(o => o.NestedCollection) 
.Where(c => c.List.Any(condition)) 
.Where(//..... more complex filtering; 

그러나, 세션 변형 너무 많은 성능을 늪지 수 조인 경고를 생성합니다.

답변

0

일반적으로 데이터베이스가 작업을 수행하고 필요한 정보를 열심히 가져 오는 것이 가장 좋습니다. 예외는 fetching multiple associations입니다.