gpt4 book ai didi

.net - 定期迭代不断变化的集合

转载 作者:行者123 更新时间:2023-12-02 00:40:25 26 4
gpt4 key购买 nike

我有一个不断变化的对象集合,我想每隔一段时间显示一些关于内容的信息(我的应用程序是多线程的,不同的线程不断提交修改集合中对象的请求,所以这是不可预测的)。

如果我锁定集合,我可以遍历它并毫无问题地获取我的信息 - 但是,这会导致其他线程出现问题,因为它们可能同时提交了多个修改集合的请求,并且将停滞不前。我已经想到了几个解决这个问题的方法,我正在寻找任何建议。

  • 制作集合的副本并对其进行迭代,允许原始集合在后台继续更新。集合可能会变得很大,因此这并不理想,但它是安全的。
  • 使用 For...Next 循环对其进行迭代,如果在我们迭代时从集合中删除了某个项目,则会捕获 IndexOutOfBounds 异常。这有时可能会导致重复项出现在我的快照中,因此它也不理想。

还有其他想法吗?我只关心即时快照,所以我不关心反射(reflect)我的应用程序中的更改——我主要关心的是集合能够以最小延迟更新,并且更新永远不会丢失。

最佳答案

您可能想研究使用来自 System.Concurrent 的一些并发集合命名空间,如果您使用的是 .NET Framework 4。例如从 ConcurrentQueue<T> 返回的迭代器类表示集合的即时 View ,并且不受集合更改的影响。 正常 集合迭代器将因基础集合的更改而失效。否则,你别无选择,只能先锁定收藏。也许有并发集合的第三方实现。但我没有研究过这些。以下是有关 .NET Framework 4 中线程安全集合的信息。

http://msdn.microsoft.com/en-us/library/dd997305(v=VS.100).aspx

关于.net - 定期迭代不断变化的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2762849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com