Heim >Backend-Entwicklung >C++ >Wie kann ich eine Warteschlange mit fester Größe und automatischer Entfernung aus der Warteschlange in C# implementieren?

Wie kann ich eine Warteschlange mit fester Größe und automatischer Entfernung aus der Warteschlange in C# implementieren?

Barbara Streisand
Barbara StreisandOriginal
2025-01-13 08:21:43487Durchsuche

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

Erstellen einer C#-Warteschlange mit fester Größe und automatischer Entfernung aus der Warteschlange

Viele Anwendungen benötigen eine Datenstruktur, die eine feste Anzahl von Elementen enthält und die ältesten entfernt, wenn sie voll sind. Dies ist nützlich, um aktuelle Ereignisse zu verfolgen oder einen Verlauf zu verwalten. Stellen Sie sich einen Webbrowser vor, der die letzten 100 besuchten URLs speichern muss. Während ConcurrentQueue<T> funktionieren könnte, ist die manuelle Verwaltung der Warteschlangenentfernung ineffizient. Eine benutzerdefinierte Wrapper-Klasse bietet eine sauberere Lösung.

Die FixedSizedQueue<T> Klasse

Diese Klasse umschließt ein ConcurrentQueue<T> und übernimmt sowohl das Einreihen als auch das Entfernen aus der Warteschlange, um eine festgelegte Größe beizubehalten. Die Klassendefinition umfasst:

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

Die EnqueueMethode

Die Methode Enqueue fügt Elemente hinzu. Wenn die Warteschlange das Limit überschreitet, werden ältere Elemente entfernt:

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

Verwenden von FixedSizedQueue<T>

Um die Klasse zu verwenden, erstellen Sie eine Instanz und legen Sie das Limit fest:

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

Beim Hinzufügen von Elementen wird die Größe automatisch beibehalten:

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

Dieser Ansatz bietet eine elegantere und effizientere Möglichkeit, Warteschlangen mit fester Größe in C# zu verwalten.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Warteschlange mit fester Größe und automatischer Entfernung aus der Warteschlange in C# implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn