2009-05-12 7 views
0

Webベースのアプリケーションで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#の専門家ではありません。検索者の作成は、条件1と条件3を組み合わせて1か所で行うことができます。

+0

http://stackoverflow.com/questions/899542/problem-using-same-instance-of-indexsearcher-for-multiple-requests この質問は関連しています上記の質問...どんな考え? ありがとう - スティーブ –