Maison >développement back-end >C++ >Comment puis-je implémenter une file d'attente de taille fixe avec suppression automatique de la file d'attente en C# ?

Comment puis-je implémenter une file d'attente de taille fixe avec suppression automatique de la file d'attente en C# ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-13 08:21:43489parcourir

How Can I Implement a Fixed-Size Queue with Automatic Dequeueing in C#?

Création d'une file d'attente C# de taille fixe avec retrait automatique de la file d'attente

De nombreuses applications ont besoin d'une structure de données contenant un nombre fixe d'éléments, supprimant les plus anciens lorsqu'ils sont pleins. Ceci est utile pour suivre les événements récents ou conserver un historique. Imaginez un navigateur Web devant stocker les 100 dernières URL visitées. Bien que ConcurrentQueue<T> puisse fonctionner, la gestion manuelle du retrait de la file d'attente est inefficace. Une classe wrapper personnalisée fournit une solution plus propre.

La FixedSizedQueue<T>Classe

Cette classe encapsule un ConcurrentQueue<T>, gérant à la fois la mise en file d'attente et la sortie de la file d'attente pour maintenir une taille définie. La définition de classe comprend :

<code class="language-csharp">public class FixedSizedQueue<T>
{
    private readonly ConcurrentQueue<T> queue = new ConcurrentQueue<T>();
    private readonly object lockObject = new object();
    public int Limit { get; set; }
    // ... other methods
}</code>

La EnqueueMéthode

La méthode Enqueue ajoute des éléments. Si la file d'attente dépasse la limite, elle supprime les éléments plus anciens :

<code class="language-csharp">public void Enqueue(T item)
{
    queue.Enqueue(item);
    lock (lockObject)
    {
        T overflow;
        while (queue.Count > Limit && queue.TryDequeue(out overflow)) ;
    }
}</code>

Utiliser FixedSizedQueue<T>

Pour utiliser la classe, créez une instance et définissez la limite :

<code class="language-csharp">var urlHistory = new FixedSizedQueue<string> { Limit = 100 };</code>

L'ajout d'éléments maintient automatiquement la taille :

<code class="language-csharp">urlHistory.Enqueue("www.google.com");  // Enqueues the URL
urlHistory.Enqueue("www.microsoft.com"); // The oldest URL is automatically dequeued</code>

Cette approche offre un moyen plus élégant et plus efficace de gérer les files d'attente de taille fixe en C#.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn