SORU
2 Mayıs 2011, PAZARTESİ


Sabit boyutlu otomatik olarak yeni enques üzerine eski değerleri dequeues hangi sıra

Son N nesneleri (tarih gibi) iletilen yük olan da paylaşılan bir veri yapısı için ConcurrentQueue kullanıyorum.

Varsayalım bir tarayıcı var ve son 100 taranan URL için istiyoruz. Otomatik olarak (sıradan çıkarma) yeni kayıt ekleme üzerine (önce) en eski giriş (enqueue) tam kapasite (tarihte 100 adresleri) geldiğinde damla hangi bir sıra istiyorum.

Nasıl System.Collections kullanarak bunu başarabilir miyim ?

CEVAP
24 NİSAN 2012, Salı


Hafif bir varyant için gitmek istiyorum... FixedSizeQueue üzerinde Seri uzantıları kullanabilmek için ConcurrentQueue uzatın

public class FixedSizedQueue<T> : ConcurrentQueue<T>
{
    private readonly object syncObject = new object();

    public int Size { get; private set; }

    public FixedSizedQueue(int size)
    {
        Size = size;
    }

    public new void Enqueue(T obj)
    {
        base.Enqueue(obj);
        lock (syncObject)
        {
            while (base.Count > Size)
            {
                T outObj;
                base.TryDequeue(out outObj);
            }
        }
    }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jagadambarecords

    jagadambarec

    13 AĞUSTOS 2008
  • Tina Chen

    Tina Chen

    26 Mayıs 2012
  • VvCompHelpvV

    VvCompHelpvV

    4 EYLÜL 2007