0

我正在开发一个多线程应用程序,我从外部提要加载数据并将它们存储在内部集合中。通过再次从外部提要加载所有数据,这些集合每 X 分钟更新一次。从这些集合中没有其他添加/删除,只是阅读。

通常我会在更新期间使用锁定,就像我在任何地方访问集合一样。

问题:

在这种情况下,并发集合会让我的生活更轻松吗?基本上我看到两种方法

  1. 从外部提要加载数据,然后删除不再存在的项目,添加缺少的项目,然后更新更改的项目——我想这是一个很好的解决方案,借助并发收集(不需要锁定,对吗?),但它需要我这边的代码太多了。

  2. 简单地用一个新的集合对象覆盖旧的集合对象(例如_data = new ConcurentBag(newData)。在这里我很确定使用并发集合完全没有优势,对吗?需要锁定机制。

使用并发集合,我可以使用开箱即用的解决方案吗?我不想重新发明轮子。

4

1 回答 1

1

是的,对于并发集合,锁定机制存储在集合中,所以如果你new用一个集合代替旧集合,那只会违背目的。它们主要用于生产者-消费者情况,通常与BlockingCollection<T>. 如果您的生产者不仅仅是添加数据,它会使事情变得更加复杂。

使用并发集合的好处是您的锁定机制不再依赖于集合 - 您可以进行单独的同步objectlock并且在关键部分内您可以随意分配另一个实例。

回答你的问题 - 我不知道有什么开箱即用的机制来做你想做的事,但我不会使用一个简单的lock语句来调用“重新发明轮子”。这有点像说使用for循环是在重新发明轮子。只需在非并发集合旁边有一个单独的同步对象。

于 2016-02-05T10:48:48.573 回答