Производительность NHibernate: Session.Criteria против LINQ в памяти - PullRequest
0 голосов
/ 17 января 2011

Что дает наилучшую производительность при необходимости набора данных в соответствии со сложными критериями? Есть два варианта: создать сложный оператор ICriteria или Session.Linq, ИЛИ использовать LINQ из корневого объекта и позволить NHibernate обрабатывать отложенную загрузку.

Вариант 1 (с использованием сеанса):

var result = Session.Linq<Contractor>().Where(contractor => contractor.account == "bla@account.com)
//....
.Where(condition => condition.Orders.Any(condition))
//... more conditions

Вариант 2 (использовать корневой объект для выполнения запросов «в памяти», что может означать, что большой набор результатов будет извлечен с сервера SQL):

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;

Вариант в памяти не генерирует предупреждения в NHPRof, однако вариант Session генерирует предупреждение о том, что слишком большое число соединений может привести к снижению производительности.

1 Ответ

0 голосов
/ 17 января 2011

Зависит, но обычно лучше, чтобы база данных выполняла свою работу и охотно выбирала то, что вам нужно.Исключением является выборка нескольких ассоциаций .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...