C# 中实现具有自动出队功能的固定大小队列
在软件开发中,管理有限的存储容量同时保留必要信息至关重要。处理队列时,经常会遇到这种情况:不断添加新数据,当达到容量限制时需要丢弃旧数据。为了解决这个问题,我们使用 System.Collections
命名空间中的 ConcurrentQueue<T>
类提供一个解决方案。
实现带出队功能的固定大小队列
要创建一个具有自动出队功能的固定大小队列,我们定义一个包装类 FixedSizedQueue<T>
,它在内部封装了一个 ConcurrentQueue<T>
:
<code class="language-csharp">public class FixedSizedQueue<T> { private readonly ConcurrentQueue<T> q = new ConcurrentQueue<T>(); private readonly 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)) ; } } }</code>
解释
FixedSizedQueue<T>
类提供了一个单一方法 Enqueue
,用于向队列添加元素。在内部,它检查队列的计数是否超过指定的 Limit
。如果是,则使用 lock
语句锁定队列,并出队元素,直到计数低于限制。
这种机制确保队列中始终只存储所需数量的元素。最旧的元素会自动删除以容纳较新的元素。
使用示例
要使用 FixedSizedQueue<T>
类,请创建一个实例并将 Limit
属性设置为所需的最高容量:
<code class="language-csharp">FixedSizedQueue<string> browserHistory = new FixedSizedQueue<string> { Limit = 100 };</code>
之后,只需调用 Enqueue
方法即可向历史记录添加新元素:
<code class="language-csharp">browserHistory.Enqueue("www.google.com");</code>
当您添加更多 URL 时,最旧的 URL 将自动出队,从而保持历史记录中 100 个 URL 的所需容量。
以上是如何在C#中实现固定大小的队列并自动出队?的详细内容。更多信息请关注PHP中文网其他相关文章!