1

我在基于 Web 的应用程序中使用 Lucene,并希望对所有传入请求重用 Indexsearcher 的相同实例。

这个逻辑(使用 C#)有意义吗?请提出建议。

DateTime lastWriteTime = System.IO.Directory.GetLastWriteTime(myIndexFolderPath);

if (HttpRuntime.Cache["myIndexSearcher"] == null) //Cache is empty

{
    searcher = new IndexSearcher(myIndexFolderPath);
    HttpRuntime.Cache.Insert("myIndexSearcher", searcher);
    HttpRuntime.Cache.Insert("myIndexTimeStamp", lastWriteTime);
}
else //Cache is not empty
{
    DateTime cachedDateTime = (DateTime)HttpRuntime.Cache["myIndexTimeStamp"];
    if (cachedDateTime == lastWriteTime)//Cache is not yet stale
    {
        searcher = (IndexSearcher)HttpRuntime.Cache["myIndexSearcher"]; 
    }
    else
    {
        searcher = new IndexSearcher(myIndexFolderPath); //index folder is modified...update searcher
        HttpRuntime.Cache.Insert("myIndexSearcher", searcher);
        HttpRuntime.Cache.Insert("myIndexTimeStamp", lastWriteTime); 
    }
}
4

1 回答 1

0

您需要同步创建 Searcher 以避免竞争条件。另外,我不确定通过 == 运算符比较 DateTime 对象是否是正确的方法。不过,我不是 C# 专家。通过组合条件 1 和条件 3,可以在一处创建搜索器。

于 2009-05-12T18:11:53.943 回答