ThreadSafeFIFOListwithAutomaticSizeLimitManagement一旦达到预先指定的限制,就丢弃足够的物品。好吧,实际上,也许它更像是一个列表,因为我不想要从队列中推入和弹出项目的整个概念,此时它不再可用。用例基本上是一个播放列表,其中我最多可以有5个即将播放的项目、当前正在播放的项目以及大约20个已经播放的项目。因此,为什么我猜它不可能是一个队列,而我正在访问中间的一个项目作为“当前”项目。我宁愿不必在列表变得庞大时手动管理丢弃旧项目......显然我可以自己编写这些,但如果C#已经存在,我不想重新发明轮子。我可以使用什么想法?在框架中,几乎有你想要的功能——ConcurrentQueue。它是一个线程安全的队列,大多数操作都是无锁实现的,所以速度非常快。唯一的特点是没有自动“丢弃”的“限制”......但这可以很容易地添加-只需创建您自己的包含私有ConcurrentQueue的类,并通过在排队新元素之前出队/扔掉来做到这一点直到达到限制在公共入队方法中实现“丢弃部分”。编辑-基于评论:一个选择是使第二个“队列”成为ObservableCollection-虽然本质上不是线程安全的(注意),但在WPF中很容易绑定......另一种方法是让你的类实现ObservableCollection接口(由IList、ICollection、IEnumerable、IList、ICollection、IEnumerable、INotifyCollectionChanged、INotifyPropertyChanged组成)-听起来很多,但其中大部分可以通过中继到内部ConcurrentQueue轻松实现,因此可以编写的实际代码不多。.请参阅http://msdn.microsoft.com/en-us/library/ms752347.aspx您可以尝试使用Rx中的newReplaySubject(intcount),它将缓冲观察到的事件流中的最后一个计数对象。http://msdn.microsoft.com/en-us/library/hh229429.aspx如果您需要更传统的编程模型(Rx一点点),请尝试TPLDataFlowBroadcastBlock。广播以电视广播命名——如果帧“处理”得不够快,它就会被丢弃,因此处理仍然相对于“实时”帧。http://msdn.microsoft.com/en-us/library/hh160447.aspx更新:ReplaySubject重放第一个X,它不是FIFO队列,它是“第一个X列表”。以上就是C#学习教程:ThreadSafeFIFOlistwithautomaticsizelimitmanagement分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
