2012-05-30 6 views
1

У меня есть структура объекта вот так: Box имеет много Item имеет много Ingredient. Когда я вызываю определенный метод, все коллекции должны быть заполнены для выполнения задачи. Я думал, что в этом случае было бы лучше загружать коллекции, но в моих тестах было бы очень быстро загружать их лениво. A Box имеет около 200 Item, которые, в свою очередь, имеют около 400 Ingredient.Яркая загрузка медленнее, чем ленивая загрузка с NHibernate

Зачем загружать NHibernate (3.3) медленнее, когда все коллекции должны заполняться?

ответ

0

Поскольку он должен загружать все строки из таблицы и подтаблицы. К сожалению, Hibernate не всегда делает это самым умным способом. Вы можете использовать пользовательские запросы для более эффективной загрузки данных. Но вы должны задать вопрос, действительно ли вам нужны все эти строки?

1

Действительно ли вы уверены, что для каждого ящика доступно свойство объектов и, в свою очередь, для каждого элемента, доступ к его свойствам?
В противном случае вы не получаете одинаковое количество данных с ленивой загрузкой.

2

Существует несколько переменных, которые могут повлиять на производительность, изменяя, как работают различные режимы выборки. Если вы каждый раз присоединяетесь к извлечению всего, подумайте, что возвращаемые числа строк будут nBoxes * nItemsPerBox * nIngredientsPerItem.

Вы имеете в виду, что в одном товаре есть 400 ингредиентов? Если это так, для одного поля, которое будет 1 * 200 * 400 = 80000 строк. В этом случае полевая информация будет повторяться 80000 раз, и каждый элемент будет повторяться 400 раз. Много данных для передачи.

Если вы включили ведение журнала SQL в NHibernate, каковы актуальные запросы?

Смежные вопросы