使用 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中文網其他相關文章!