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 サイトの他の関連記事を参照してください。