gpt4 book ai didi

c# - 具有自动大小限制管理的 ThreadSafe FIFO 列表

转载 作者:太空狗 更新时间:2023-10-29 21:41:28 27 4
gpt4 key购买 nike

我正在尝试找出要使用的数据类型...基本上我想要一个线程安全的 FIFO 队列,一旦达到预先指定的限制就会自动丢弃足够旧的项目。

好吧,实际上,也许更多的是列表,因为我不想要插入队列并从队列中弹出一个项目的整个概念,此时它不再可用。

用例基本上是一个播放列表,其中我最多有 5 个即将播放的项目、当前正在播放的项目以及大约 20 个已经播放的项目。因此,为什么我猜它不能是一个队列,我将访问中间的一个项目作为“当前”项目。而且我宁愿不必在列表变大时手动管理丢弃旧项目……显然我可以自己编写所有这些,但如果 C# 已经存在,我不想重新发明轮子。

有什么我可以使用的想法吗?

最佳答案

在 Framework 中有一些几乎具有您想要的功能的东西 - ConcurrentQueue .它是线程安全的队列,大多数操作都是无锁实现的,所以速度非常快。

唯一没有的功能是自动“扔掉”的“限制”……

但这可以轻松添加 - 只需创建您自己的包含私有(private) ConcurrentQueue 的类即可并在您的公共(public)入队方法中实现“丢弃部分”,方法是在将新元素入队之前出列/丢弃直到满足您的限制。

编辑 - 根据评论:
一种选择是使第二个“队列”成为 ObservableCollection - 尽管本质上不是线程安全的(注意)这很容易在 WPF 中绑定(bind)...

另一种方法是让您的类实现 ObservableCollection 接口(interface)(由 IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable, INotifyCollectionChanged, INotifyPropertyChanged 组成)因此 - 听起来很多,但其中大部分可以通过中继到内部 ConcurrentQueue 轻松实现所以没有太多真正的代码可写...
参见 http://msdn.microsoft.com/en-us/library/ms752347.aspx

关于c# - 具有自动大小限制管理的 ThreadSafe FIFO 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7142247/

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