首頁 >後端開發 >C++ >如何在C#中實現固定大小的隊列並自動出隊?

如何在C#中實現固定大小的隊列並自動出隊?

Patricia Arquette
Patricia Arquette原創
2025-01-13 11:57:44200瀏覽

How to Implement a Fixed-Sized Queue with Automatic Dequeueing in C#?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn