Наше приложение изначально было разработано с учетом NHibernate и его ограничений, связанных с пакетной обработкой.Однако со временем он превратился в обработчик данных, и мы наблюдаем значительное снижение производительности.
Сессия заканчивается тем, что приходится поддерживать около 1000 или более объектов, и наше профилирование показало, что автоматическая очистка и грязная проверка являются самыми большими нарушителями здесь.Мы попытались отключить автоматическую очистку и управлять ею самостоятельно в операциях сохранения / обновления, но это привело к катастрофической производительности при пакетном сохранении / обновлении.Сейчас мы рассматриваем возможность удаления ненужных объектов из сеанса.
- Я столкнулся с методом вытеснения кеша 2-го уровня (
sessionFactory.Evict(typeof(Cat));
), который позволяет нам выселять по типу, но мы не используем кеш 2-го уровня.Могу ли я по-прежнему использовать этот метод для удаления объектов из кэша 1-го уровня? - Я также читал об одном шаблоне выборки объектов, удаления их из сеанса, а затем повторной привязки их, при необходимости, к сеансу путем вызова Update () на них.Является ли это рекомендуемым и принятым шаблоном, потому что я также прочитал, что NH3 поднял стену к этому?(Мы все еще можем использовать его, поскольку мы не обновили до NH3)
Хотя мы понимаем, что мы не используем NHibernate наилучшим образом, мы просто пытаемся как-то улучшить текущую ситуацию.Ответы на вышеуказанные вопросы и любые другие предложения / рекомендации с благодарностью.Спасибо.
Обновление
После просмотра документации и кода NH, я понимаю, что 1, вероятно, невозможно.Я все еще смотрю на некоторые указатели или советы по использованию Evict ().Мне удалось резко сократить количество объектов в сеансе.Но все еще не знаю, стоит ли платить за обновление или удаление выселенных объектов.Заранее спасибо за помощь.