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

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

Patricia Arquette
Patricia Arquetteoriginal
2025-01-13 11:57:44200parcourir

How to Implement a Fixed-Sized Queue with Automatic Dequeueing in C#?

Implémentation d'une file d'attente de taille fixe avec fonction de retrait automatique de la file d'attente en C#

Dans le développement de logiciels, gérer une capacité de stockage limitée tout en conservant les informations nécessaires est crucial. Lorsque vous travaillez avec des files d'attente, vous rencontrez souvent cette situation : de nouvelles données sont constamment ajoutées et les anciennes données doivent être supprimées lorsque la limite de capacité est atteinte. Pour résoudre ce problème, nous proposons une solution en utilisant la classe System.Collections dans l'espace de noms ConcurrentQueue<T>.

Implémentation d'une file d'attente de taille fixe avec fonction de retrait de file d'attente

Pour créer une file d'attente de taille fixe avec une fonctionnalité de retrait automatique de la file d'attente, nous définissons une classe wrapper FixedSizedQueue<T>, qui encapsule un ConcurrentQueue<T> :

en interne
<code class="language-csharp">public class FixedSizedQueue<T>
{
    private readonly ConcurrentQueue<T> q = new ConcurrentQueue<T>();
    private readonly object lockObject = new object();

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

Explication

La classe

FixedSizedQueue<T> fournit une méthode unique Enqueue pour ajouter des éléments à une file d'attente. En interne, il vérifie si le nombre de files d'attente dépasse le Limit spécifié. Si tel est le cas, utilisez l'instruction lock pour verrouiller la file d'attente et retirer les éléments de la file d'attente jusqu'à ce que le nombre tombe en dessous de la limite.

Ce mécanisme garantit que seul le nombre requis d'éléments est toujours stocké dans la file d'attente. Les éléments les plus anciens sont automatiquement supprimés pour accueillir les éléments les plus récents.

Exemple d'utilisation

Pour utiliser la classe FixedSizedQueue<T>, créez une instance et définissez l'attribut Limit sur la capacité souhaitée la plus élevée :

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

Ensuite, il suffit d'appeler la méthode Enqueue pour ajouter un nouvel élément à l'historique :

<code class="language-csharp">browserHistory.Enqueue("www.google.com");</code>

Au fur et à mesure que vous ajoutez d'autres URL, les URL les plus anciennes sont automatiquement supprimées de la file d'attente, conservant ainsi la capacité requise de 100 URL dans l'historique.

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