NHibernate держится за ссылку на объекты данных - PullRequest
0 голосов
/ 09 февраля 2011

Я пытаюсь выяснить, куда направляется большая часть памяти в моем приложении, и во время выполнения некоторого профилирования я замечаю, что любые объекты данных, которые загружаются NHibernate, зависают после запроса (asp.net), и, следовательно, сессия, закончилась.Возвращаясь к этому, есть разные вещи, которые, кажется, делают это, например, «SingleTableEntityPersister» и «StatefulPersistenceContext».Я отключил кэширование 2-го уровня, но они все еще удерживаются на

Есть идеи?

Сессия корректно удаляется:

        if (session != null)
        {
            if (session.Transaction != null && session.Transaction.IsActive)
            {
                session.Transaction.Rollback();
            }
            else
            {
                session.Flush();
            }

            session.Close();
            session.Dispose();
        }

1 Ответ

1 голос
/ 09 февраля 2011

NHibernate отслеживает все изменения, которые вносятся в объекты, это означает, что если вы сделаете:

user.FirstName = "name"

, то произойдет соответствующее обновление в БД.

Но для отслеживания этого NH нужны ссылки на все ваши объекты.Чтобы получить неотслеживаемые объекты, вы можете использовать IStatelessSession или удалить объект из сеанса, используя метод Evict.

Когда сеанс удаляется, он освобождает все отслеживаемые объекты.Поэтому проверьте, правильно ли удален сеанс и закрыта ли транзакция

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