ホームページ >バックエンド開発 >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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。