2009-05-12 5 views
0

Я использую Lucene в веб-приложении и хочу повторно использовать один и тот же экземпляр Indexsearcher для всех входящих запросов.Повторное использование 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

Если вы отделите весь свой код на 4 пробела, он будет выглядеть читаемым. – itsadok

+0

спасибо .. будет иметь это в виду ... –

ответ

0

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

+0

http://stackoverflow.com/questions/899542/problem-using-same-instance-of-indexsearcher-for-multiple-requests Этот вопрос связан с вопрос выше ... любые мысли? Спасибо - Стив –

Смежные вопросы