Memory &引用;Lucene.net-2.3.2.1”;内存泄漏问题

Memory &引用;Lucene.net-2.3.2.1”;内存泄漏问题,memory,lucene.net,memory-leaks,Memory,Lucene.net,Memory Leaks,我正在我的项目中使用Lucene.Net-2.3.2.1。我的项目还支持多线程环境。Lucene索引服务正在作为Windows服务工作问题是当服务运行时,它的内存阻塞逐渐增加。因此,几个小时后,它在任务管理器中显示了150MB的内存,而当它以13MB开始时,它有一个内存增加的行为。我通过dotTrace Profiler发现,在Lucene.Net中有一些方法和对象增加了内存。从调用树中,我的一个点跟踪指出,Index()、Segment()相关函数保持的内存随着服务的执行而增加。所以一次一次,

我正在我的项目中使用Lucene.Net-2.3.2.1。我的项目还支持多线程环境。Lucene索引服务正在作为Windows服务工作问题是当服务运行时,它的内存阻塞逐渐增加。因此,几个小时后,它在任务管理器中显示了150MB的内存,而当它以13MB开始时,它有一个内存增加的行为。我通过dotTrace Profiler发现,在Lucene.Net中有一些方法和对象增加了内存。从调用树中,我的一个点跟踪指出,Index()、Segment()相关函数保持的内存随着服务的执行而增加。所以一次一次,它会使系统崩溃


请帮助我如何从内存泄漏中恢复我的应用程序

增加内存使用并不一定意味着内存泄漏。NET中的内存泄漏并不常见,但有几个选项您应该检查

  • 事件。确保所有事件侦听器在不再使用时立即与发布服务器分离。如果不这样做,只要出版商还活着,听众就会一直活着
  • 如果代码使用任何持有本机代码句柄的一次性资源,请确保在不再需要这些句柄时立即调用Dispose
  • 阻塞终结器将防止对其他可终结对象进行垃圾收集,因此请确保终结器不会执行超出其必须执行的任何操作(在许多情况下,它们可能根本不需要)

如果您想检查哪些对象保持活动状态以及为什么不收集它们,我建议使用WinDbg+Sos

在lucene.net dev邮件列表和bug跟踪器上报告您的问题,以防它是真正的bug