固定大小的队列,可在新入队时自动使旧值出队
我正在使用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