新しいキューが追加されると自動的に古い値がキューから削除される固定サイズのキュー 質問する

新しいキューが追加されると自動的に古い値がキューから削除される固定サイズのキュー 質問する

私は、ConcurrentQueue<T>渡された最後の N 個のオブジェクト (履歴のようなもの) を保持することを目的とした共有データ構造に使用しています。

ブラウザがあり、最後に閲覧した 100 件の URL を取得したいとします。容量がいっぱいになったとき (履歴に 100 件のアドレス)、新しいエントリが挿入 (エンキュー) されると、最も古い (最初の) エントリを自動的に削除 (デキュー) するキューが必要です。

どうすればそれを実現できますかSystem.Collections?

ベストアンサー1

Enqueue 時に Count をチェックし、カウントが制限を超えたら Dequeue するラッパー クラスを作成します。

 public class FixedSizedQueue<T>
 {
     readonly ConcurrentQueue<T> q = new ConcurrentQueue<T>();
     private 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)) ;
        }
     }
 }

おすすめ記事