Implementierung einer Warteschlange fester Größe mit automatischer Entnahmefunktion in C#
Bei der Softwareentwicklung ist die Verwaltung begrenzter Speicherkapazität bei gleichzeitiger Beibehaltung notwendiger Informationen von entscheidender Bedeutung. Beim Arbeiten mit Warteschlangen kommt es häufig vor, dass ständig neue Daten hinzugefügt werden und alte Daten verworfen werden müssen, wenn die Kapazitätsgrenze erreicht ist. Um dieses Problem zu lösen, stellen wir eine Lösung bereit, die die Klasse System.Collections
im Namespace ConcurrentQueue<T>
verwendet.
Implementierung einer Warteschlange fester Größe mit Dequeue-Funktion
Um eine Warteschlange mit fester Größe und automatischer Entnahmefunktion zu erstellen, definieren wir eine Wrapper-Klasse FixedSizedQueue<T>
, die intern einen 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>
Erklärung
Die KlasseFixedSizedQueue<T>
stellt eine einzige Methode Enqueue
zum Hinzufügen von Elementen zu einer Warteschlange bereit. Intern prüft es, ob die Anzahl der Warteschlange den angegebenen Limit
überschreitet. Wenn ja, verwenden Sie die lock
-Anweisung, um die Warteschlange zu sperren und Elemente aus der Warteschlange zu entfernen, bis die Anzahl unter den Grenzwert fällt.
Dieser Mechanismus stellt sicher, dass immer nur die erforderliche Anzahl an Elementen in der Warteschlange gespeichert wird. Die ältesten Elemente werden automatisch entfernt, um neuere Elemente aufzunehmen.
Anwendungsbeispiel
Um die Klasse FixedSizedQueue<T>
zu verwenden, erstellen Sie eine Instanz und legen Sie das Attribut Limit
auf die höchste gewünschte Kapazität fest:
<code class="language-csharp">FixedSizedQueue<string> browserHistory = new FixedSizedQueue<string> { Limit = 100 };</code>
Anschließend rufen Sie einfach die Methode Enqueue
auf, um ein neues Element zum Verlauf hinzuzufügen:
<code class="language-csharp">browserHistory.Enqueue("www.google.com");</code>
Wenn Sie weitere URLs hinzufügen, werden die ältesten URLs automatisch aus der Warteschlange entfernt, sodass die erforderliche Kapazität von 100 URLs im Verlauf erhalten bleibt.
Das obige ist der detaillierte Inhalt vonWie implementiert man eine Warteschlange fester Größe mit automatischer Entfernung aus der Warteschlange in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!