搜索大型ConcurrentBag
本文关键字:ConcurrentBag 大型 搜索 | 更新日期: 2023-09-27 17:59:01
.NET 4.5.1
我有一个包含200000个对象的ConcurrentBag。一个对象被两个类型为long的属性认为是"唯一的"。
我需要检查袋子以前是否存在一个唯一的物体,如果它不存在,请添加它。
我认为做下面这样的事情是不正确的-
var foundRef = mybag.Where( r => r.mainid == tempObj.mainid &&
r.subid == tempObj.subid);
什么是最快地搜查包的正确方法?我确实需要"包"的并发性/安全性。
谢谢。
为什么不使用ConcurrentDictionary<Tuple<long, long>, Foo>
?您的数据将通过这两个属性mainid
和subid
进行索引。
这种方法的唯一缺点是,每次想要从字典中检索值时,都必须创建新的Tuple<long, long>
:
var foundRef = myDict[new Tuple<long, long>(tempObj.mainid, tempObj.subid)];
但它会给你尽可能快的访问时间接近O(1)。