C# 中實現具有自動出隊功能的固定大小隊列
在軟體開發中,管理有限的儲存容量同時保留必要資訊至關重要。處理佇列時,經常會遇到這種情況:不斷添加新數據,當達到容量限制時需要丟棄舊數據。為了解決這個問題,我們使用 System.Collections
命名空間中的 ConcurrentQueue<T>
類別提供一個解決方案。
實現帶出隊功能的固定大小隊列
要建立一個具有自動出隊功能的固定大小隊列,我們定義一個包裝類別 FixedSizedQueue<T>
,它在內部封裝了一個 ConcurrentQueue<T>
:
<code class="language-csharp">public class FixedSizedQueue<T> { private readonly ConcurrentQueue<T> q = new ConcurrentQueue<T>(); private readonly object lockObject = new object(); public int Limit { get; set; } public void Enqueue(T obj) { q.Enqueue(obj); lock (lockObject) { T overflow; while (q.Count > Limit && q.TryDequeue(out overflow)) ; } } }</code>
解釋
FixedSizedQueue<T>
類別提供了一個單一方法 Enqueue
,用於為佇列添加元素。在內部,它檢查隊列的計數是否超過指定的 Limit
。如果是,則使用 lock
語句鎖定佇列,並出隊元素,直到計數低於限制。
這種機制確保佇列中始終只儲存所需數量的元素。最舊的元素會自動刪除以容納較新的元素。
使用範例
要使用 FixedSizedQueue<T>
類,請建立一個實例並將 Limit
屬性設定為所需的最高容量:
<code class="language-csharp">FixedSizedQueue<string> browserHistory = new FixedSizedQueue<string> { Limit = 100 };</code>
之後,只需呼叫 Enqueue
方法即可為歷史記錄新增元素:
<code class="language-csharp">browserHistory.Enqueue("www.google.com");</code>
當您新增更多 URL 時,最舊的 URL 將自動出隊,從而保持歷史記錄中 100 個 URL 的所需容量。
以上是如何在C#中實現固定大小的隊列並自動出隊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!