首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多键字典/列表

多键字典/列表
EN

Stack Overflow用户
提问于 2012-10-30 18:24:12
回答 2查看 393关注 0票数 0

我们有一个多租户应用程序,其运行的站点实例存储在ConcurrentDictionary<string, SiteInstance>中,其中string是站点的主机名。

我们现在要求每个站点实例支持多个主机名。作为一种临时解决方案,我首先按键进行搜索,如果没有找到匹配项,则对字典执行LINQ查询,以查找具有匹配主机名的实例。

这里有没有性能更好/更快的解决方案?

注:映射到每个站点实例的主机名列表是可变的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-30 18:27:57

您可以不使用具有相同SiteInstance和不同密钥的多个键值对吗?

代码语言:javascript
复制
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 (但不是threadsafe ):

代码语言:javascript
复制
var instances = dict.Values.Distinct();
票数 2
EN

Stack Overflow用户

发布于 2012-10-30 18:32:24

刚刚写了一个复杂的答案,我已经看到了@Mudu的答案,如果真的这么简单,它显然是一个更好的方法。不管怎样,这是我的..。我猜它的一个优点是它很容易扩展。

创建一个名为HostNames的继承自List<String>的小类。然后,如果列表中的任何内容与其他内容匹配,则可以覆盖Equals()方法和GetHashCode()以返回匹配。

然后,您可以将这个类用作字典键ConcurrentDictionary<HostNames, SiteInstance>

要检索值,您需要构建一个hostName对象:

代码语言:javascript
复制
var hostName = new HostNames();
hostName.Add("hostName1");
var siteInstance = concurrentDictionary[hostName];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13136970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档