搜索大型ConcurrentBag?

时间:2014-04-18 03:15:20

标签: c# .net performance linq concurrency

.NET 4.5.1

我有一个包含200,000个对象的ConcurrentBag。一个对象被认为是"唯一的"通过两个long类型的属性。

我需要检查包中是否存在唯一对象,如果它不存在,请添加它。

我认为做类似下面的事情是不对的 -

var foundRef = mybag.Where( r => r.mainid == tempObj.mainid &&
r.subid == tempObj.subid); 

尽快搜索行李的正确方法是什么?我确实需要'包的并发性/安全性。

感谢。

1 个答案:

答案 0 :(得分:4)

为什么不使用ConcurrentDictionary<Tuple<long, long>, Foo>?您的数据将通过这两个属性mainidsubid进行索引。

这种方法的唯一缺点是每次要从字典中检索值时都必须创建新的Tuple<long, long>

var foundRef = myDict[new Tuple<long, long>(tempObj.mainid, tempObj.subid)];

但它会为您提供接近O(1)的最快访问时间。