質問

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>>();
    }
}
役に立ちましたか?

解決

  1. として ウィキで説明しました, 、内蔵コンテナ(起動)は現在、マッピングされたさまざまなタイプの複数のコア/インスタンスにアクセスするために制限されています。これについてより柔軟性が必要な場合は、Windsor / structureMap / autofacに切り替えるか、 この機能を実装するのに役立ちます.

  2. 内蔵コンテナの登録は、発見したようにスレッドセーフではない場合がありますが、異なるスレッドでsolrnetを登録 /初期化することで何も得られません。すべての初期化を単一のスレッドに移動するだけで、実際の重い作業は、solr.query(...)またはsolr.add(...)を行うときに実行されます。 スレッドセーフ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top