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# ?
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>
:
<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 classeFixedSizedQueue<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!