0

実行中のサイトインスタンスを含むマルチテナントアプリケーションがあります。ConcurrentDictionary<string, SiteInstance>ここstringで、はサイトのホスト名です。

現在、サイトインスタンスごとに複数のホスト名をサポートする必要があります。一時的な解決策として、最初にキーで検索し、一致するものが見つからない場合は、辞書に対してLINQクエリを実行して、一致するホスト名を持つインスタンスを見つけます。

ここに、より優れた/より高速なソリューションはありますか?

注:各サイトインスタンスにマップされるホスト名のリストは可変です。

4

2 に答える 2

2

SiteInstance同じキーと異なるキーで複数のキーと値のペアを使用できませんか?

var instance = new SiteInstance();
dict.TryAdd("hostname1", instance); // in actual code, you should check
dict.TryAdd("hostname2", instance); // TryAdd's return value

ホスト名は一意である必要があります。個別の オブジェクトにアクセスSiteInstanceするには(コメントによる編集)、追加を使用するか、HashSet<SiteInstance>LINQを使用できます(ただし、スレッドセーフではありません)。

var instances = dict.Values.Distinct();
于 2012-10-30T10:27:57.143 に答える
2

複雑な答えを書いたばかりですが、@ Muduの答えを見てきましたが、それがそれほど単純であれば、明らかにはるかに優れた方法です。とにかく、ここに私のものがあります...これが簡単に拡張できるという利点があると思います。

List<String>から継承する、と呼ばれる 小さなクラスを作成しますHostNamesEquals()次に、メソッドをオーバーライドしてGetHashCode()、リストの内容のいずれかが他の内容と一致する場合に一致を返すことができます。

次に、このクラスを辞書キーとして使用できますConcurrentDictionary<HostNames, SiteInstance>

値を取得するには、hostNameオブジェクトを作成する必要があります。

var hostName = new HostNames();
hostName.Add("hostName1");
var siteInstance = concurrentDictionary[hostName];
于 2012-10-30T10:32:23.533 に答える