【问题标题】:nhibernate does not release memory after session closes会话关闭后 nhibernate 不释放内存
【发布时间】:2012-05-31 23:17:11
【问题描述】:

我正在使用 NHibernate 2.2 和 c# 3.5 和 VS2008,

问题是当我关闭 Nhibernate Session 对象时,内存没有释放。 即使我每次关闭后都会调用 GC.Collect(),但没有任何东西被释放

当会话关闭时,如何强制 NHibernate 释放会话中加载的对象?

谢谢

【问题讨论】:

  • 我有这个确切的问题 - 这是一个问题,但似乎其他 nhib 用户大量拒绝!

标签: nhibernate


【解决方案1】:

使用 Dispose 而不是关闭。 (不仅适用于 Session,而且适用于在 .net 中实现 IDisposable 的每个对象)

【讨论】:

  • 会不会是周边代码的问题?你怎么知道内存没有被分析器清理?
  • 我从 Windows 任务管理器中看到它,内存只变高,当我运行 GC.Collect() 时它会下降一点(大约 1 或 2 MB),但没有释放整个内存
  • 一些说明: 1. 一次性物品不能被垃圾回收一次多次清理。 2. 应用程序占用的内存以不同于重新释放单个对象以防止碎片的速度提供给其他应用程序。 3.在windows任务管理器中无法查看对象的单个内存打印。 4. 单个会话中超过 1/2 MB 的内存听起来很多(加载的数据过多)。 5.在开始调试GC本身之前,您可以更好地下载某种分析器工具(我使用Ants memory profiler)以获得更准确的视图
  • 有什么技巧或技巧可以让我更快地释放这些内存吗?我想在 512MB Ram 的 PC 上部署我的应用程序,所以内存管理应该更好
【解决方案2】:

即使您致电GC.Collect();,也有许多事情可能会阻止垃圾收集的实际发生。例如,如果其他仍然存在且正在使用的对象持有对您不再需要的东西的引用,那么该对象将保持活跃。

另外不要忘记,使用的一部分内存将是 NHibernate 为您从数据库返回的对象。

【讨论】:

    猜你喜欢
    • 2011-02-25
    • 2013-01-02
    • 2018-12-08
    • 2018-09-25
    • 1970-01-01
    • 2011-03-18
    • 2018-01-31
    • 2012-03-15
    • 2010-11-29
    相关资源
    最近更新 更多