gpt4 book ai didi

c# - NHibernate + ActiveRecord + PostgreSQL = 内存异常

转载 作者:行者123 更新时间:2023-11-29 12:22:40 25 4
gpt4 key购买 nike

我有一个 winforms C#.Net 2.0 系统,带有 ActiveRecord + NHibernate 与 PostgreSQL 9 数据库通信。当用户打开系统时,通过一个新的 SessionScope() 开始与 DB 的通信。对于某些用户来说,它工作得很好......但对于其他用户,系统会生成内存异常,与 msdn 论坛中 Marcio 的问题相同:link .我怎么解决这个问题?问题出在 NHibernate 中!当我尝试关闭 ISession 对象或尝试提交事务时发生错误。

最佳答案

OutOfMemoryException 的根本原因可能在您发布的代码之外。你只是有一个内存泄漏,它可以在你的应用程序的任何地方。异常将从尝试分配更多内存的代码中抛出,而不一定是从导致内存泄漏的代码中抛出。使用内存profiler找出导致内存泄漏的原因。

不过,这个问题很可能是由于 NHibernate 中膨胀的一级缓存造成的。来自 SessionScope文档:

At the same time, NHibernate is keeping tracks of changes to objects within the scope. If there are too many objects and too many changes to keep track, then performance will slowly downgrade. So a flushing now and then will be required.

  • 摆脱 GC 调用,您不需要它们。
  • 限制 session 范围
  • 定期刷新/清除 session
  • 确保使用 lazy loading适本地(不要从数据库加载你不需要的信息)

关于c# - NHibernate + ActiveRecord + PostgreSQL = 内存异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7400906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com