创建具有自动出列功能的 C# 固定大小队列
许多应用程序需要一个包含固定数量项目的数据结构,当项目已满时删除最旧的项目。这对于跟踪最近的事件或维护历史记录非常有用。 想象一下,一个 Web 浏览器需要存储最近访问的 100 个 URL。虽然 ConcurrentQueue<T>
可以工作,但手动管理出队效率很低。自定义包装类提供了更清晰的解决方案。
FixedSizedQueue<T>
班级
此类包装了 ConcurrentQueue<T>
,处理入队和出队以维持设定的大小。 类定义包括:
<code class="language-csharp">public class FixedSizedQueue<T> { private readonly ConcurrentQueue<T> queue = new ConcurrentQueue<T>(); private readonly object lockObject = new object(); public int Limit { get; set; } // ... other methods }</code>
Enqueue
方法
Enqueue
方法添加项目。 如果队列超出限制,它将删除较旧的项目:
<code class="language-csharp">public void Enqueue(T item) { queue.Enqueue(item); lock (lockObject) { T overflow; while (queue.Count > Limit && queue.TryDequeue(out overflow)) ; } }</code>
使用FixedSizedQueue<T>
要使用该类,请创建一个实例并设置限制:
<code class="language-csharp">var urlHistory = new FixedSizedQueue<string> { Limit = 100 };</code>
添加项目会自动保持大小:
<code class="language-csharp">urlHistory.Enqueue("www.google.com"); // Enqueues the URL urlHistory.Enqueue("www.microsoft.com"); // The oldest URL is automatically dequeued</code>
这种方法提供了一种更优雅、更高效的方式来管理 C# 中的固定大小队列。
以上是如何在 C# 中实现具有自动出队功能的固定大小队列?的详细内容。更多信息请关注PHP中文网其他相关文章!