Полагаясь на кэш второго уровня nhibernate против проталкивания объектов в сеанс asp.net - PullRequest
3 голосов
/ 18 апреля 2010

У меня есть несколько больших объектов, к которым часто обращаются в одном сеансе. Например, в моем приложении есть страница отчетов, которая состоит из динамически генерируемых графических изображений. Для каждого изображения диаграммы на этой странице клиент отправляет запросы соответствующему контроллеру, а контроллер генерирует изображения, используя некоторые объекты. Я могу использовать словарь сеансов asp.net для «кэширования» этих объектов или использовать поддержку кэширования второго уровня nhibernate, например, используя кэшированные запросы.

Каково ваше мнение?

Кстати, я буду использовать виртуальный хостинг, подходит ли хостинг второго уровня для кэширования nhibernate?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 19 апреля 2010

Я думаю, что вы должны использовать кэш NHibernate. Если пользователь делает отдельный запрос на получение каждой сущности одна за другой, вам, вероятно, следует использовать различные реализации NHibernate ISession для их получения (из-за сеанса для стратегии веб-запроса).

Кроме того, при использовании кэша Nhibernate у вас не будет проблем с проблемами параллелизма - он решит их за вас.

0 голосов
/ 02 сентября 2012

Помните, что необходимо кэшировать сущность (из сеанса, из которого вы ее загрузили) в статическую переменную, к которой затем обращается другой сеанс (например, извлекаемый из созданной вами системы кэширования).

Экземпляры сущностей связаны с запоминанием сеанса, поэтому не следует смешивать и сопоставлять экземпляры через границы сеанса.

Я решил это раньше, создав облегченную версию класса (которая не поддерживает NH Session) и вместо этого кэшируя этот базовый класс.

В качестве альтернативы, используйте кэш 2-го уровня, у которого нет этой проблемы.

...