تحديد حجم Queue في .NET: دليل سريع
عندما تعمل مع قوائم الانتظار في .NET، قد يكون من الصعب إدارة حجم قائمة الانتظار، خاصة عندما ترغب في منعها من النمو بشكل غير محدود. قد تجد نفسك تتساءل: هل هناك طريقة لتحديد حجم Queue<T>
تلقائيًا، أم أنني بحاجة إلى إنشاء تنفيذ خاص بي؟ يهدف هذا المنشور إلى تقديم حل لهذه المشكلة الشائعة من خلال مناقشة كيفية إنشاء فئة LimitedQueue<T>
مخصصة تلبي احتياجاتك.
فهم فئة Queue
ما هي Queue؟
تمثل فئة Queue<T>
في .NET مجموعة من الكائنات وفق نظام الإدخال أولاً الإخراج أولاً (FIFO). وهي تتيح لك إضافة العناصر إلى نهاية قائمة الانتظار وإزالتها من المقدمة. ومع ذلك، فإن إحدى القيود هي أن قائمة الانتظار يمكن أن تنمو بشكل غير محدود، مما قد يستهلك موارد غير ضرورية.
المشكلة مع النمو غير المحدود
إذا قمت بتهيئة Queue<T>
بسعة معينة، مثل 2، فإنها تشير فقط إلى الحجم الأولي. مع استمرار إضافة العناصر، ستتوسع قائمة الانتظار تلقائيًا لاستيعاب المزيد من العناصر. يمكن أن يتسبب ذلك في مشاكل مثل:
- زيادة استخدام الذاكرة
- تدهور الأداء
- صعوبة في الحفاظ على السلوك المقصود لتطبيقك
إنشاء LimitedQueue
لمواجهة هذه التحديات، يمكننا إنشاء فئة مخصصة تسمى LimitedQueue<T>
. ستقوم هذه الفئة بالوراثة من Queue<T>
وتوفير وظائف لتقييد عدد العناصر المخزنة في قائمة الانتظار. إليك كيف يمكنك القيام بذلك:
تنفيذ LimitedQueue
فيما يلي تنفيذ بسيط لقائمة انتظار مقيدة:
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);
}
}
تحليل الشفرة
-
إعلان الفئة:
LimitedQueue<T>
ترث منQueue<T>
، مما يسمح لها بالعمل مثل قائمة انتظار عادية. -
خاصية Limit: تم الإعلان عن خاصية باسم
Limit
لتحديد الحجم الأقصى لقائمة الانتظار. -
الباني: يقوم الباني بتهيئة قائمة الانتظار بالحد المحدد.
-
طريقة Enqueue المخصصة:
- يتحقق مما إذا كان عدد العناصر الحالي (
Count
) أكبر من أو يساويLimit
. - إذا كان الأمر كذلك، فإنه يقوم بإخراج العناصر من مقدمة قائمة الانتظار حتى يصبح الحجم أقل من الحد.
- أخيرًا، يضيف العنصر الجديد إلى نهاية قائمة الانتظار.
- يتحقق مما إذا كان عدد العناصر الحالي (
فوائد استخدام LimitedQueue
-
إدارة الذاكرة: تساعد هذه الفئة في إدارة الذاكرة بشكل فعال عن طريق ضمان عدم نمو قائمة الانتظار إلى ما يتجاوز الحد المحدد.
-
الإخراج التلقائي: يضمن الإزالة التلقائية للعناصر القديمة أن لديك دائمًا وصولاً إلى أحدث البيانات، مما يتماشى مع مبادئ FIFO.
-
سهولة الاستخدام: من خلال الوراثة من
Queue<T>
، تحتفظ بجميع وظائف قائمة الانتظار المعتادة مع إضافة قيودك الخاصة.
الخاتمة
في الختام، على الرغم من أن فئة Queue<T>
المدمجة لا تحتوي على طرق مدمجة لتحديد الحجم، إلا أن إنشاء فئة LimitedQueue<T>
مخصصة يعد حلاً بسيطًا وفعالًا. هذا التنفيذ ليس عمليًا فحسب، بل يمنحك أيضًا تحكمًا أكبر في كيفية إدارة تطبيقك لبياناته. باستخدام مثل هذه الفئة، يمكنك ضمان عمل قائمة الانتظار الخاصة بك ضمن حد حجم محدد، مما يحافظ على أداء تطبيقك بشكل مثالي.
من خلال استخدام فئة LimitedQueue<T>
الموضحة أعلاه، يمكنك تبسيط متطلبات تخزين البيانات الخاصة بك ومنع القضايا المحتملة التي تنشأ من حجم قائمة الانتظار غير المنضبط. بالتوفيق في البرمجة!