Основная причина исключения OutOfMemoryException может быть за пределами кода, который вы опубликовали.У вас просто есть утечка памяти, и она может быть где угодно в вашем приложении.Исключение будет выдано из кода, который пытается выделить больше памяти, необязательно из кода, который вызывает утечку памяти.Используйте память profiler , чтобы выяснить причину утечки памяти.
Вполне вероятно, однако, что эта проблема связана с раздутым кэшем 1-го уровня в NHibernate.Из SessionScope документа:
В то же время NHibernate отслеживает изменения объектов в области действия.Если слишком много объектов и слишком много изменений для отслеживания, производительность будет медленно снижаться.Так что время от времени потребуется очистка.
- Избавьтесь от вызовов GC, они вам не нужны.
- Ограничьте область сеанса
- Периодически очищать / очищать сеанс
- Убедитесь, что вы используете отложенную загрузку надлежащим образом (не загружайте ненужную информацию из базы данных)