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

Comment implémenter une file d'attente de taille fixe avec retrait automatique de la file d'attente en C# ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-13 08:50:47833parcourir

How to Implement a Fixed-Size Queue with Automatic Dequeuing in C#?

Création d'une file d'attente de taille fixe en C# avec suppression automatique des éléments plus anciens

Cet article aborde la création d'une structure de données qui conserve un historique limité des objets, supprimant automatiquement les entrées les plus anciennes lorsque la taille maximale est atteinte. Nous allons créer cette file d'attente en utilisant l'espace de noms System.Collections.

Solution :

La solution utilise une classe wrapper, FixedSizedQueue<T>, autour de ConcurrentQueue<T>. La méthode Enqueue dans ce wrapper vérifie la taille de la file d'attente. Si la file d'attente est pleine (définie par la propriété Limit), l'élément le plus ancien est supprimé via Dequeue pour accueillir le nouvel élément.

Voici le code C# de la classe FixedSizedQueue<T> :

<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; }

    public void Enqueue(T obj)
    {
        queue.Enqueue(obj);
        lock (lockObject)
        {
            T overflow;
            while (queue.Count > Limit && queue.TryDequeue(out overflow)) ;
        }
    }
}</code>

L'utilisation de FixedSizedQueue<T> garantit un historique de taille fixe, avec suppression automatique des éléments plus anciens lorsque la limite de capacité est atteinte.

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