NHibernate持有对数据对象的引用

时间:2011-02-09 12:33:47

标签: asp.net nhibernate memory

我正在尝试找出我的应用程序中的大量内存所在的位置,并且在进行一些分析时我注意到NHibernate加载的任何数据对象在请求时都会挂起(是asp.net )因此会议已经结束。追溯它,似乎有各种各样的事情,如“SingleTableEntityPersister”和“StatefulPersistenceContext”。我暂时禁用了二级缓存,但它们仍然被保留在

有什么想法吗?

会话正确处理:

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

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

1 个答案:

答案 0 :(得分:1)

NHibernate跟踪对对象所做的所有更改,这意味着如果你这样做:

user.FirstName = "name"

它将在DB中进行适当的更新。

但要跟踪此NH需要引用所有对象。要获取未跟踪的实体,您可以使用IStatelessSession或使用Evict方法从会话中删除对象。

当处理会话时,它会释放所有被跟踪的实体。因此,请检查会话是否已正确删除并且交易已关闭