0

パフォーマンスを向上させるためにインデックス全体をメモリに入れていましたがRAMDirectory、インデックスがどんどん大きくなるまではうまく機能していました。今私は得てOutOfMemoryExceptionいます。ディスク上のインデックスは 1.24GB ですが、オブジェクトのオブジェクト サイズがRAMDirectory.NET の 2GB オブジェクト サイズの制限を超えてしまい、例外がスローされたのではないかと考えています。もう 1 つの理由として、仮想アドレス空間が断片化しすぎて、オブジェクトに十分な大きさの穴を見つけられないことが考えられます。

引き続きご利用いただきたいと思いRAMDirectoryます。を避けながらどうすればそれを行うことができOutOfMemoryExceptionますか?

IndexWriter.Optimizeまた、インデックスを作成するときに呼び出して、インデックス全体が 1 つの大きなファイルになることにも注意してください。

4

1 に答える 1

2

RAMDirectory私が考えることができるを使い続ける唯一の方法は、それをいくつかの小さなインデックスに分割し、 MultiSearcher.

このようにして、.NET の 2GB のオブジェクト サイズ制限を回避できます。64 ビットでも、1 つのオブジェクトのサイズ制限は 2GB であることに注意してください。RamDirectory は、インデックスを表すために内部的にバイト配列を保持します。大きすぎると爆発します。

私の謙虚な意見では、おそらく大きなインデックスで FSDirectory を使用することを検討する必要があります。速度は通常、ウォームアップ後のほとんどのアプリケーションで十分です。

于 2011-12-06T15:06:03.137 に答える