在开始时填充常量的线程安全集合

时间:2014-01-23 18:14:02

标签: c# collections thread-safety contains

我有一个字符串集合的用例,它在应用程序的生命周期中永远不会改变,甚至在应用程序版本之间也不会改变。

我想对它做的唯一操作(除了填充它)是检查它是否包含给定的字符串。

列表需要可以从每个线程访问。

我需要这么快,所以我匆匆创造了这个:

private static readonly System.Collections.Concurrent.BlockingCollection<string> coll = new System.Collections.Concurrent.BlockingCollection<string>();

static WysiwygController()
{
    coll.Add("aaa");
    coll.Add("bbb");
    coll.Add("ccc");
    coll.Add("ddd");
}

并检查它是否包含字符串:

foreach (var item in coll)
{
    if (item == something)
    {
        return true;
    }
}
return false;

虽然它有效但我非常怀疑我为这项特殊任务选择了最有效的收藏。

是否有更适合此类型的集合类型?

1 个答案:

答案 0 :(得分:0)

由于您只是从列表中读取,因此您可以使用任意数量的集合(即List,HashSet等)。

关于检查列表是否包含项目。我建议使用任何IEnumerable集合类型中提供的Contains方法。或者......您可以使用Linq查询...