【发布时间】:2012-10-23 12:55:14
【问题描述】:
我正在寻找一种基本上像这样工作的数据结构:
- 结构是有序的值序列。
- 每个插入的值都声称一个大于前一个索引的索引,不会被重用,也不会移动(它是持久的)。
- 可以在一次操作中从结构中删除特定索引之前的所有项目。
- 所有仍然存在的项目都可以通过它们的索引来访问。
- 可以批量检索两个索引之间的所有项目。 (如果可以在添加新项目时检索它们,那也很棒。)
以上是我最好的实现猜测。我真正想要的属性是能够拥有一个保存某种书签值并且可以读取新项目而不会错过的消费者,并且能够在某个时间戳之前清除项目。但是,数据结构不需要知道时间戳;能够在特定索引之前删除所有内容。
我实现此结构的方式是保留项目计数开始位置的 int,然后直接保留项目列表或列表段列表。索引是某种原始整数,但不会在程序生命周期的实际时间跨度的几倍内回绕。
我所知道的最接近的结构是来自the LMAX Disruptor 的特定环形缓冲区。但是,如果消费者落后太远,这种结构也会阻塞,这不符合我的目的。消费者是面向批处理的,可能得不到频繁的 CPU 时间; Disruptor 最适用于专门的逻辑任务,持续针对环形缓冲区工作。
所以我要问的问题是:
- 这个有名字吗?
- 是否有针对 C# 或其他语言的实现?
- 我的用例有更好的替代方案吗?
【问题讨论】:
标签: c# .net data-structures