我在winforms C#.Net 2.0中有一个系统,它使用ActiveRecord + NHibernate与PostgreSQL 9数据库通信。当用户打开系统时,通过一个新的SessionScope()开始与数据库的通信。对于一些用户来说,它工作得很完美……但对于其他人,系统会生成一个内存异常,与msdn论坛中的Marcio问题相同:link。我该如何解决这个问题?问题出在NHibernate!当我尝试关闭ISession对象或尝试提交事务时,就会出现错误。
发布于 2011-09-13 20:32:53
OutOfMemoryException的潜在原因可能是您发布的代码之外的原因。你只是有一个内存泄漏,它可以在你的应用程序中的任何地方。异常将从尝试分配更多内存的代码引发,而不一定来自导致内存泄漏的代码。使用memory profiler找出导致内存泄漏的原因。
然而,这个问题很可能是由于NHibernate中的一级缓存膨胀造成的。来自SessionScope文档:
同时,NHibernate会跟踪作用域内对象的变化。如果有太多的对象和太多的更改需要跟踪,那么性能将会慢慢下降。因此需要不时地进行刷新。
(不要从数据库加载不需要的信息)lazy loading
https://stackoverflow.com/questions/7400906
复制相似问题