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
Libérer: 2025-01-13 11:57:44
original
248 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal