我正在使用ConcurrentQueue一个共享数据结构,该结构的目的是保存传递给它的最后N个对象(历史记录)。
ConcurrentQueue
假设我们有一个浏览器,并且希望有最近浏览的100个Urls。我想要一个队列,当容量满(历史记录中有100个地址)时,该队列在新条目插入(入队)时会自动删除(出队)最旧的(第一个)条目。
我该如何使用System.Collections?
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)) ; } } }