固定大小的队列,可在新入队时自动使旧值出队

我正在使用ConcurrentQueue一个共享数据结构,该结构的目的是保存传递给它的最后N个对象(历史记录)。

假设我们有一个浏览器,并且希望有最近浏览的100个Urls。我想要一个队列,当容量满(历史记录中有100个地址)时,该队列在新条目插入(入队)时会自动删除(出队)最旧的(第一个)条目。

我该如何使用System.Collections

回答:

我将编写一个包装器类,该类在Enqueue上将检查Count,然后在计数超过限制时出队列。

 public class FixedSizedQueue<T>

{

ConcurrentQueue<T> q = new ConcurrentQueue<T>();

private object lockObject = new object();

public int Limit { get; set; }

public void Enqueue(T obj)

{

q.Enqueue(obj);

lock (lockObject)

{

T overflow;

while (q.Count > Limit && q.TryDequeue(out overflow)) ;

}

}

}

以上是 固定大小的队列,可在新入队时自动使旧值出队 的全部内容, 来源链接: utcz.com/qa/410008.html

回到顶部