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

如何在 C# 中實現具有自動出隊功能的固定大小隊列?

Barbara Streisand
Barbara Streisand原創
2025-01-13 08:21:43489瀏覽

How Can I Implement a Fixed-Size Queue with Automatic Dequeueing in C#?

建立具有自動出列功能的 C# 固定大小隊列

許多應用程式需要一個包含固定數量項目的資料結構,當項目已滿時刪除最舊的項目。這對於追蹤最近的事件或維護歷史記錄非常有用。 想像一下,一個 Web 瀏覽器需要儲存最近造訪的 100 個 URL。雖然 ConcurrentQueue<T> 可以工作,但手動管理出隊效率很低。自訂包裝類別提供了更清晰的解決方案。

FixedSizedQueue<T>班級

此類包裝了 ConcurrentQueue<T>,處理入隊和出隊以維持設定的大小。 類別定義包括:

<code class="language-csharp">public class FixedSizedQueue<T>
{
    private readonly ConcurrentQueue<T> queue = new ConcurrentQueue<T>();
    private readonly object lockObject = new object();
    public int Limit { get; set; }
    // ... other methods
}</code>

Enqueue方法

Enqueue 方法新增項目。 如果佇列超出限制,它將刪除較舊的項目:

<code class="language-csharp">public void Enqueue(T item)
{
    queue.Enqueue(item);
    lock (lockObject)
    {
        T overflow;
        while (queue.Count > Limit && queue.TryDequeue(out overflow)) ;
    }
}</code>

使用FixedSizedQueue<T>

要使用該類,請建立一個實例並設定限制:

<code class="language-csharp">var urlHistory = new FixedSizedQueue<string> { Limit = 100 };</code>

新增項目會自動保持大小:

<code class="language-csharp">urlHistory.Enqueue("www.google.com");  // Enqueues the URL
urlHistory.Enqueue("www.microsoft.com"); // The oldest URL is automatically dequeued</code>

這種方法提供了一種更優雅、更有效率的方式來管理 C# 中的固定大小隊列。

以上是如何在 C# 中實現具有自動出隊功能的固定大小隊列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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