1. ホーム
  2. c#

[解決済み] 新しいエンクスの際に古い値を自動的にデキューする固定サイズのキュー

2022-05-10 01:13:08

質問

私は ConcurrentQueue を共有データ構造に使用しています。

私たちがブラウザを持っていて、最後に閲覧した100のURLを持ちたいと仮定します。私は、容量がいっぱいになったとき(履歴の100アドレス)、新しいエントリの挿入(enqueue)時に最も古い(最初の)エントリを自動的にドロップ(dequeue)するキューを望んでいます。

どのように私はそれを達成することができます使用 System.Collections ?

どのように解決するのですか?

Enqueue時にCountをチェックし、Countが制限を超えたらDequeueするようなラッパークラスを書けばいいのですが。

 public class FixedSizedQueue<T>
 {
     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)) ;
        }
     }
 }