使用 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
添加一个项目;如果超出限制,它会使用锁来安全地删除旧项目,直到大小在限制内。这仅保留最近的条目。 您可以根据应用程序的需要扩展此类以包含其他方法,例如 Dequeue
、Count
等。
以上是如何在 C# 中使用并发队列维护有界历史记录?的详细内容。更多信息请关注PHP中文网其他相关文章!