首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当对象大小超过2 2GB时,如何使用RAMDirectory并避免OutOfMemoryException

当对象大小超过2 2GB时,如何使用RAMDirectory并避免OutOfMemoryException
EN

Stack Overflow用户
提问于 2011-12-06 04:41:24
回答 1查看 955关注 0票数 0

我一直在使用RAMDirectory将我的整个索引放入内存中以提高性能,它一直运行得很好,直到我的索引不断增长。现在我得到了OutOfMemoryException。虽然我在磁盘上的索引是1.24 2GB,但我怀疑RAMDirectory对象的对象大小最终超过了.NET 2 2GB的对象大小限制,因此抛出了异常。另一个原因可能是虚拟地址空间太过碎片化,无法为我的对象找到足够大的空洞。

我很乐意继续使用RAMDirectory。我如何在避免OutOfMemoryException的同时做到这一点呢?

还请注意,当我编写索引时,我调用了IndexWriter.Optimize,因此整个索引都在一个大文件中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-06 23:06:03

我能想到的继续使用RAMDirectory的惟一方法是将它拆分为几个较小的索引并使用MultiSearcher

这样你将能够避免.NET 2 2GB对象大小的限制,请注意,即使在64位上,单个对象仍然有2 2GB的大小限制,RamDirectory在内部保存了一个字节数组来表示索引,这可能是它太大时导致它爆炸的原因。

在我的愚见中,你可能应该考虑使用带有大索引的FSDirectory,在预热之后,它的速度通常对大多数应用程序来说已经足够好了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8391575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档