【发布时间】:2011-12-05 20:41:24
【问题描述】:
我一直在使用 RAMDirectory 将整个索引放入内存以提高性能,它运行良好,直到我的索引不断增长。现在我收到OutOfMemoryException。虽然我在磁盘上的索引为 1.24GB,但我怀疑 RAMDirectory 对象的对象大小最终超过了 .NET 2GB 对象大小限制,因此引发了异常。另一个原因可能是虚拟地址空间过于碎片化,无法为我的对象找到足够大的洞。
我很想继续使用RAMDirectory。如何在避免OutOfMemoryException 的同时做到这一点?
还请注意,当我编写索引时,我会调用IndexWriter.Optimize,因此整个索引都在一个大文件中。
【问题讨论】:
-
我认为您会看到使用 RAMDirectory 进行搜索的速度提升很小。我会在没有它的情况下尝试它,我敢打赌,一旦你加热索引,你会发现性能相当。
-
谢谢!加热索引需要什么?
-
切换到 64 位操作系统。
-
感谢@Hans,我使用的是 64 位操作系统
-
这不可能。您是否将主 EXE 项目的 Platform target 属性设置为 AnyCPU?
标签: c# lucene lucene.net out-of-memory ramdirectory