一尘不染

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

c#

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

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

我该如何使用System.Collections


阅读 413

收藏
2020-05-19

共1个答案

一尘不染

我将编写一个包装器类,该类在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)) ;
        }
     }
 }
2020-05-19