首页 >后端开发 >C++ >如何在 C# 中使用并发队列维护有界历史记录?

如何在 C# 中使用并发队列维护有界历史记录?

Patricia Arquette
Patricia Arquette原创
2025-01-13 09:01:43400浏览

How to Maintain a Bounded History Using a Concurrent Queue in C#?

使用 System.Collections.Concurrent 获取固定大小的历史记录

想象一下需要一个数据结构来跟踪最近的历史记录,例如浏览器 URL。 System.Collections.Concurrent.ConcurrentQueue 是一个不错的选择,但我们需要限制它的大小。

此示例演示了一个 FixedSizedQueue<T> 类,它包装 ConcurrentQueue 来管理有界历史记录:

<code class="language-csharp">public class FixedSizedQueue<T>
{
    private readonly ConcurrentQueue<T> _queue = new ConcurrentQueue<T>();
    private readonly object _lock = new object();
    public int Limit { get; set; }

    public void Enqueue(T item)
    {
        _queue.Enqueue(item);

        lock (_lock)
        {
            T overflow;
            while (_queue.Count > Limit && _queue.TryDequeue(out overflow)) { }
        }
    }

    // Add other methods like Dequeue, Count, etc., as needed.
}</code>

Limit 属性定义最大队列大小。 Enqueue 添加一个项目;如果超出限制,它会使用锁来安全地删除旧项目,直到大小在限制内。这仅保留最近的条目。 您可以根据应用程序的需要扩展此类以包含其他方法,例如 DequeueCount 等。

以上是如何在 C# 中使用并发队列维护有界历史记录?的详细内容。更多信息请关注PHP中文网其他相关文章!

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