Нужно ли вызывать .Dispose () в StandardAnalyzer, или .Dispose () в IndexWriter располагает своих потомков? - PullRequest
0 голосов
/ 16 ноября 2018

Инициализация IndexWriter в Lucene.Net выглядит следующим образом:

var analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer(version);
var indexWriterConfig = new Lucene.Net.Index.IndexWriterConfig(version, analyzer);
Index = new Lucene.Net.Index.IndexWriter(luceneDir, indexWriterConfig);

То есть, вы не можете создать экземпляр IndexWriter без Analyzer. Итак, я ожидаю, что вызов .Dispose() на IndexWriter избавит от его дочерних элементов, включая Analyzer. Однако, просматривая код, я не вижу, что происходит - пока. Я пропустил это?

Итак: вызывает ли .Dispose() на IndexWriter анализатор, и если нет, то почему?

1 Ответ

0 голосов
/ 24 января 2019

IndexWriter не утилизирует анализатор.

Он не утилизирует анализатор, поскольку не может быть уверен, что вы не будете использовать анализатор в другом месте.Это ссылка, которую он получил через конструктор, он может использоваться другими экземплярами IndexWriter, не зная об этом.

Речь идет о владении;Вы создали анализатор и позволили автору использовать его.Таким образом, вы обязаны утилизировать анализатор.

...