.NET 4.5.1
我有一个包含200,000个对象的ConcurrentBag。一个对象被认为是"唯一的"通过两个long类型的属性。
我需要检查包中是否存在唯一对象,如果它不存在,请添加它。
我认为做类似下面的事情是不对的 -
var foundRef = mybag.Where( r => r.mainid == tempObj.mainid &&
r.subid == tempObj.subid);
尽快搜索行李的正确方法是什么?我确实需要'包的并发性/安全性。
感谢。
答案 0 :(得分:4)
为什么不使用ConcurrentDictionary<Tuple<long, long>, Foo>
?您的数据将通过这两个属性mainid
和subid
进行索引。
这种方法的唯一缺点是每次要从字典中检索值时都必须创建新的Tuple<long, long>
:
var foundRef = myDict[new Tuple<long, long>(tempObj.mainid, tempObj.subid)];
但它会为您提供接近O(1)的最快访问时间。