固定サイズの履歴管理のための ConcurrentQueue の拡張
System.Collections.Concurrent.ConcurrentQueue は、マルチスレッド環境でキューを管理するための強力なツールです。 ただし、本質的に固定サイズの制限はサポートされていません。キューがいっぱいになっても、古いエントリは自動的に削除されません。
FixedSizedQueue ソリューションの紹介
この制限を克服するために、FixedSizedQueue
ラッパー クラスを構築します。このクラスは、新しい挿入時に古い要素を自動的にデキューするための ConcurrentQueue
の機能を強化します。
実装戦略
FixedSizedQueue
は、スレッドセーフのためにプライベート ConcurrentQueue
インスタンスとロック オブジェクトをカプセル化します。 Enqueue
メソッドはキューの Count
をチェックします。事前定義された Limit
を超える場合、メソッドはロックを取得し、Count
が Limit
を下回るまで要素を繰り返しデキューします。
実際の応用
FixedSizedQueue
を利用するには、目的の Limit
で初期化します:
<code class="language-csharp">FixedSizedQueue<string> urlQueue = new FixedSizedQueue<string>(100);</code>
新しい URL の追加 (および古い URL の自動的な削除) は簡単です。
<code class="language-csharp">urlQueue.Enqueue("example.com");</code>
特典
FixedSizedQueue
は、固定サイズの履歴データを管理するための合理的かつ効率的なアプローチを提供します。最新のエントリを優先し、古いエントリを自動的に破棄します。これは、ストレージが限られているシナリオや、特定の数の最近のイベントを追跡することが重要な場合に最適です。
以上がConcurrentQueue を使用して固定サイズの履歴キューを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。