.NET’te Queue‘nin Boyutunu Kısıtlama: Hızlı Bir Kılavuz

.NET’te kuyruklarla çalışırken, kuyruk boyutunu yönetmek oldukça zorlayıcı olabilir, özellikle de sonsuz bir şekilde büyümesini önlemek istediğinizde. Kendinize şunu soruyor olabilirsiniz: Queue<T>‘nin boyutunu otomatik olarak kısıtlamak için bir yol var mı, yoksa kendi uygulamamı mı oluşturmam gerekiyor? Bu blog yazısı, ihtiyaçlarınıza uygun bir özel LimitedQueue<T> sınıfı oluşturmanın yollarını tartışarak bu yaygın soruna bir çözüm sunmayı amaçlamaktadır.

Queue Sınıfını Anlamak

Queue Nedir?

.NET’teki Queue<T> sınıfı, ilk giren ilk çıkar (FIFO) bir nesne koleksiyonunu temsil eder. Kuyruğun sonuna eleman eklemenize ve önünden çıkarmanıza olanak tanır. Ancak, bir kısıtlama olarak, kuyruk sonsuz bir şekilde büyüyebilir, bu da gereksiz kaynak tüketimine yol açabilir.

Sınırsız Büyümenin Sorunu

Queue<T>‘yi belirli bir kapasite ile (örneğin 2) başlatırsanız, bu yalnızca başlangıç boyutunu belirtir. Öğeleri eklemeye devam ettikçe, kuyruk otomatik olarak daha fazla elemanı karşılayacak şekilde genişleyecektir. Bu, aşağıdakiler gibi sorunlara yol açabilir:

  • Artan bellek kullanımı
  • Performans düşüşü
  • Uygulamanızın beklenen davranışını sürdürmede zorluk

LimitedQueue Oluşturma

Bu zorluklarla başa çıkmak için LimitedQueue<T> adı verilen özel bir sınıf oluşturabiliriz. Bu sınıf, Queue<T> sınıfından miras alacak ve kuyrukta depolanan öğelerin sayısını sınırlama işlevselliği sağlayacaktır. İşte bunu nasıl yapabileceğiniz:

LimitedQueue Uygulaması

Aşağıda kısıtlı bir kuyruğun basit bir uygulaması yer almaktadır:

public class LimitedQueue<T> : Queue<T>
{
    public int Limit { get; set; }

    public LimitedQueue(int limit) : base(limit)
    {
        Limit = limit;
    }

    public new void Enqueue(T item)
    {
        while (Count >= Limit)
        {
            Dequeue();
        }
        base.Enqueue(item);
    }
}

Kodun İncelenmesi

  • Sınıf Bildirimi: LimitedQueue<T> sınıfı Queue<T>‘den miras alarak normal bir kuyruk gibi çalışmasını sağlar.

  • Limit Özelliği: Kuyruğun maksimum boyutunu tanımlamak için Limit adında bir özellik bildirilmiştir.

  • Yapıcı: Yapıcı, kuyruk için belirtilen limit ile başlatılır.

  • Özel Enqueue Metodu:

    • Mevcut öğe sayısının (Count) Limit‘ten büyük veya eşit olup olmadığını kontrol eder.
    • Eğer öyleyse, kuyruk önünden öğeleri çıkarmaya başlar ve boyut limitin altına düşene kadar devam eder.
    • Son olarak, yeni öğeyi kuyruğun sonuna ekler.

LimitedQueue Kullanmanın Avantajları

  • Bellek Yönetimi: Bu sınıf, kuyruk belirtilen bir limitin üzerine çıkmadığından, belleği etkili bir şekilde yönetmeye yardımcı olur.

  • Otomatik Çıkartma: En eski öğelerin otomatik olarak çıkarılması, her zaman en güncel verilere erişiminizi sağlar ve FIFO ilkelerine uyar.

  • Kullanım Kolaylığı: Queue<T>‘den miras alarak, tipik bir kuyrukta bulunan tüm işlevsellikleri korurken kendi kısıtlamalarınızı eklemiş olursunuz.

Sonuç

Sonuç olarak, yerleşik Queue<T> sınıfının boyut sınırlaması için yerleşik yöntemleri olmadığından, özel bir LimitedQueue<T> sınıfı oluşturmak basit ve etkili bir çözüm olacaktır. Bu uygulama yalnızca pratik değil, aynı zamanda uygulamanızın verilerini nasıl yönettiği konusunda daha fazla kontrol sahibi olmanızı sağlar. Böyle bir sınıf ile kuyruğunuzun tanımlı bir boyut limitinde çalıştığını garanti edebilir, uygulamanızın performansını optimum seviyede tutabilirsiniz.

Yukarıda belirtilen LimitedQueue<T> sınıfını kullanarak, veri depolama gereksinimlerinizi basitleştirebilir ve kontrolsüz bir kuyruk boyutundan kaynaklanabilecek olası sorunları önleyebilirsiniz. Mutlu kodlamalar!