在基于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);
}
}
答案 0 :(得分:0)
您需要同步创建搜索者以避免竞争条件。另外,我不确定是否通过==运算符比较DateTime对象是正确的方法。不过,我不是C#专家。通过结合条件1和条件3,可以在一个地方创建搜索者。