Повторное использование IndexSearcher - PullRequest
0 голосов
/ 12 мая 2009

Я использую 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); 
    }
}

1 Ответ

0 голосов
/ 12 мая 2009

Вам необходимо синхронизировать создание Searcher, чтобы избежать условий гонки. Кроме того, я не уверен, что сравнение объектов DateTime с помощью оператора == является правильным способом сделать это. Я не эксперт C #, хотя. Создание Searcher может быть выполнено в одном месте путем объединения условия 1 и условия 3.

...