質問
Solrnet接続のコンテナが静的に保たれるのはなぜですか?これは非常に大きな欠点です。当社のアプリケーションで、アプリケーションに非同期リクエストを送信すると、Solrnetが異常に動作します。 Solrnetでこの問題を回避するにはどうすればよいですか?
class P
{
static void M(string[] a)
{
Thread t = new Thread(delegate()
{
f1();
});
Thread t1 = new Thread(delegate()
{
f2();
});
t.Start();
t1.Start();
t.Join();
t1.Join();
}
static void f1()
{
Startup.Init<Doc>(new SolrNet.Impl.SolrPostConnection("http://localhost:8983/solr3/"));
ISolrOperations<Doc> solrOperations2 = ServiceLocator.Current.GetInstance<ISolrOperations<Document>>();
}
static void f2()
{
Startup.Init<Doc>(new SolrNet.Impl.SolrPostConnection("http://localhost:8983/solr1/"));
ISolrOperations<Doc> solrOperations2 = ServiceLocator.Current.GetInstance<ISolrOperations<Document>>();
}
}
解決
として ウィキで説明しました, 、内蔵コンテナ(起動)は現在、マッピングされたさまざまなタイプの複数のコア/インスタンスにアクセスするために制限されています。これについてより柔軟性が必要な場合は、Windsor / structureMap / autofacに切り替えるか、 この機能を実装するのに役立ちます.
内蔵コンテナの登録は、発見したようにスレッドセーフではない場合がありますが、異なるスレッドでsolrnetを登録 /初期化することで何も得られません。すべての初期化を単一のスレッドに移動するだけで、実際の重い作業は、solr.query(...)またはsolr.add(...)を行うときに実行されます。 は スレッドセーフ。
所属していません StackOverflow