我正在尝试找出我的应用程序中的大量内存所在的位置,并且在进行一些分析时我注意到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();
}
答案 0 :(得分:1)
NHibernate跟踪对对象所做的所有更改,这意味着如果你这样做:
user.FirstName = "name"
它将在DB中进行适当的更新。
但要跟踪此NH需要引用所有对象。要获取未跟踪的实体,您可以使用IStatelessSession
或使用Evict
方法从会话中删除对象。
当处理会话时,它会释放所有被跟踪的实体。因此,请检查会话是否已正确删除并且交易已关闭