1

索引付けの際、Lucene はクローズされていないリーダー、ライターなどをリークすることがよくありました。

各反復の最後に Lucene のすべての Closeables を閉じる方法はありますか?

4

1 に答える 1

2

何もないのではないかと思います。

LuceneはあなたIndexSearcherに、、IndexReaderを与えますIndexWriter。それらのいずれも閉じないと、ファイル記述子のリークが発生するだけであり、事実上それを回避する方法はありません。ただし、いくつかのテクニックがあります。

  1. を使用しSearcherManagerます。ただし、これはまだ呼び出す必要がmanager.release(s)あり、ライター/リーダーには適用されません。
  2. これらのクラスを拡張.close()し、ファイナライザーに呼び出しを入れます。そして、はい、私はそれが汚れていることを知っています。しかし、それは機能します!
  3. Java 7を使用している場合は、これらのクラスを拡張AutoCloseableし、try-with-resourcesステートメントで実装して使用できるため、自動的に終了します。理想的には、これらすべてのクラスがAutoCloseable自分自身を実装する必要があり、LuceneがJava7に切り替えたときに実装されることを願っています。
于 2013-01-21T11:40:34.453 に答える