自動デキューを使用した 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 中国語 Web サイトの他の関連記事を参照してください。