首页 >后端开发 >C++ >如何在 C# 中实现具有自动出队功能的固定大小队列?

如何在 C# 中实现具有自动出队功能的固定大小队列?

Barbara Streisand
Barbara Streisand原创
2025-01-13 08:21:43489浏览

How Can I Implement a Fixed-Size Queue with Automatic Dequeueing in C#?

创建具有自动出列功能的 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn