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 Enqueue
Methode
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!