2009-05-12 8 views
0

Utilisez Lucene dans une application Web et souhaitez réutiliser la même instance d'Indexsearcher pour toutes les demandes entrantes.Réutilisation de IndexSearcher

Est-ce que cette logique (utilisant C#) a du sens?

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

Si vous indentez tous vos espaces de code 4, il aura l'air lisible. – itsadok

+0

merci ... gardez cela à l'esprit ... –

Répondre

0

Vous devez synchroniser la création du moteur de recherche pour éviter les conditions de concurrence. En outre, je ne suis pas sûr si la comparaison des objets DateTime par l'opérateur == est la bonne façon de le faire. Je ne suis pas un expert C#, cependant. Création de Searcher peut être fait à un endroit en combinant la condition 1 et la condition 3.

+0

http://stackoverflow.com/questions/899542/problem-using-same-instance-of-indexsearcher-for-multiple-requests cette question est liée à la question ci-dessus ... des pensées? Merci - Steve –

Questions connexes