所以我在这里实现一些缓存层。特别是我坚持

ConcurrentDictionary<SomeKey,HashSet<SomeKey2>>


我需要确保HashSet上的操作也是线程安全的(ergo Update是线程安全的)。是否可以通过任何简单的方式进行?还是必须在UpdateFactory委托中进行同步?如果答案是肯定的(我想是),您中的任何人以前是否遇到过此问题并已解决?

我想避免使用ConcurrentDictionaries的ConcurrentDictionary,因为它们分配了很多同步对象,并且在这个东西中可能有大约一百万个条目,因此我希望减轻对GC的压力。
之所以选择HashSet,是因为它保证了分摊的插入,删除和访问的固定成本。

前面提到的结构将用作较大数据集的索引,并以列作为键(SomeKey和Somekey2),就像数据库索引一样。

最佳答案

好的,最后我决定使用Immutable设置和锁定条带化,因为它易于实现和理解。如果我在写入时需要更高的性能(不复制插入时的整个哈希集),我将实现带条带化的读取器/写入器锁-仍然应该可以。
感谢您的建议。

关于c# - 如何确保集合的ConcurrentDictionary线程安全?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9254723/

10-08 20:47