Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每次Lucene索引运行时';It’越来越慢了_C#_.net_Performance_Lucene.net - Fatal编程技术网

C# 每次Lucene索引运行时';It’越来越慢了

C# 每次Lucene索引运行时';It’越来越慢了,c#,.net,performance,lucene.net,C#,.net,Performance,Lucene.net,这段代码使用Lucene.NET测试索引 for (int i = 0; i < 10; i++) { var stopwatch = Stopwatch.StartNew(); string indexPath = Path.Combine("C:\\lucene\\"); var directory = FSDirectory.Open(new DirectoryInfo(indexPath)); var analyzer = new StandardA

这段代码使用Lucene.NET测试索引

for (int i = 0; i < 10; i++)
{
    var stopwatch = Stopwatch.StartNew();
    string indexPath = Path.Combine("C:\\lucene\\");
    var directory = FSDirectory.Open(new DirectoryInfo(indexPath));
    var analyzer = new StandardAnalyzer(LuceneConfiguration.Version);

    IndexWriter indexWriter = null;
    try
    {
        indexWriter = new IndexWriter(directory, analyzer, true,
                                        IndexWriter.MaxFieldLength.UNLIMITED);
        indexWriter.DeleteAll();

        for (int documentNumber = 0; documentNumber < 100; documentNumber++)
        {
            var document = new Document();
            for (int fieldNumber = 0; fieldNumber < 10; fieldNumber++)
            {
                document.Add(new Field("Field" + fieldNumber, "asdf qwerty Value" + fieldNumber, Field.Store.YES,
                                        Field.Index.ANALYZED));
            }
            indexWriter.AddDocument(document);
        }

        indexWriter.Optimize();
    }
    finally
    {
        if (indexWriter != null)
        {
            indexWriter.Close();
        }
    }
    stopwatch.Stop();
    Console.WriteLine("Index time: " + stopwatch.Elapsed.TotalMilliseconds);


    var reader = IndexReader.Open(directory, true);
    var searcher = new IndexSearcher(reader);
    var parser = new QueryParser(LuceneConfiguration.Version, "Field0", analyzer);

    var query = parser.Parse("asdf");

    var collector = TopScoreDocCollector.create(10, true);

    searcher.Search(query, collector);

    Console.WriteLine("Hits: " + collector.GetTotalHits());
}

Console.ReadKey();
for(int i=0;i<10;i++)
{
var stopwatch=stopwatch.StartNew();
字符串indexath=Path.Combine(“C:\\lucene\\”;
var directory=FSDirectory.Open(newdirectoryinfo(indexPath));
var analyzer=新的StandardAnalyzer(LuceneConfiguration.Version);
IndexWriter IndexWriter=null;
尝试
{
indexWriter=新的indexWriter(目录、分析器、true、,
IndexWriter.MaxFieldLength.UNLIMITED);
index writer.DeleteAll();
对于(int documentNumber=0;documentNumber<100;documentNumber++)
{
var document=新文档();
对于(int fieldNumber=0;fieldNumber<10;fieldNumber++)
{
添加(新字段(“字段”+字段号,“asdf qwerty值”+字段号,Field.Store.YES,
字段。索引。分析);
}
indexWriter.AddDocument(文档);
}
index writer.Optimize();
}
最后
{
if(indexWriter!=null)
{
indexWriter.Close();
}
}
秒表;
WriteLine(“索引时间:“+stopwatch.appeased.total毫秒”);
var reader=IndexReader.Open(目录,true);
var searcher=新索引搜索器(读卡器);
var parser=newqueryparser(LuceneConfiguration.Version,“Field0”,analyzer);
var query=parser.Parse(“asdf”);
var collector=TopScoreDocCollector.create(10,true);
searcher.Search(查询、收集器);
WriteLine(“Hits:+collector.GetTotalHits());
}
Console.ReadKey();
每次运行索引时,索引都会变得越来越慢。如果我在索引之后跳过搜索,它不会变慢。这仅在我开始调试时发生。如果我没有调试就启动它,就不会


什么原因可能导致这种情况?

我想知道这是否是Lucene尝试自动清除索引目录时第一次出现IOException。由于您的读卡器/搜索器仍处于打开状态,并锁定要删除的段文件,因此可能会出现这种情况。

我想知道Lucene尝试自动清除索引目录时是否第一次出现IOException。由于您的读卡器/搜索器仍处于打开状态,并锁定要删除的段文件,因此可能会发生这种情况。

我没有看到显式的
。Commit()
是否自动提交某种类型的文件?您是在分析同一版本,还是在其中一个版本中使用调试版本,在另一个版本中使用发布版本?indexWrite.Close()提交它。不管我是在发布版还是调试版中运行它。啊,如果我在调试版中运行它会很慢。如果我不调试就启动它,它会一直很快。啊,是的,我忘记了
.Close()
。说到这里,你也应该关闭你的IndexSearcher和IndexReader。我没有看到一个显式的
。Commit()
你是某种类型的自动提交吗?您是在分析同一版本,还是在其中一个版本中使用调试版本,在另一个版本中使用发布版本?indexWrite.Close()提交它。不管我是在发布版还是调试版中运行它。啊,如果我在调试版中运行它会很慢。如果我不调试就启动它,它会一直很快。啊,是的,我忘记了
.Close()
。说到这里,你也应该关闭你的IndexSearcher和IndexReader我认为你是对的。看起来Lucene抛出了很多异常,使得调试时速度变慢……我认为你是对的。看起来Lucene抛出了很多异常,使得调试时速度变慢。。。