Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Melaksanakan Baris Bersaiz Tetap dengan Penyahgantian Automatik dalam C#?

Bagaimana untuk Melaksanakan Baris Bersaiz Tetap dengan Penyahgantian Automatik dalam C#?

Patricia Arquette
Patricia Arquetteasal
2025-01-13 11:57:44196semak imbas

How to Implement a Fixed-Sized Queue with Automatic Dequeueing in C#?

Melaksanakan baris gilir saiz tetap dengan fungsi dequeue automatik dalam C#

Dalam pembangunan perisian, mengurus kapasiti storan terhad sambil mengekalkan maklumat yang diperlukan adalah penting. Apabila bekerja dengan baris gilir, anda sering menghadapi situasi ini: data baharu sentiasa ditambah dan data lama perlu dibuang apabila had kapasiti dicapai. Untuk menyelesaikan masalah ini, kami menyediakan penyelesaian menggunakan kelas System.Collections dalam ruang nama ConcurrentQueue<T>.

Melaksanakan baris gilir saiz tetap dengan fungsi dequeue

Untuk mencipta baris gilir bersaiz tetap dengan fungsi dequeue automatik, kami mentakrifkan kelas pembalut FixedSizedQueue<T>, yang merangkum ConcurrentQueue<T>:

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

Penjelasan

Kelas

FixedSizedQueue<T> menyediakan satu kaedah Enqueue untuk menambah elemen pada baris gilir. Secara dalaman, ia menyemak sama ada kiraan baris gilir melebihi Limit yang ditentukan. Jika ya, gunakan pernyataan lock untuk mengunci elemen baris gilir dan nyah gilir sehingga kiraan jatuh di bawah had.

Mekanisme ini memastikan bahawa hanya bilangan elemen yang diperlukan sentiasa disimpan dalam baris gilir. Elemen tertua dialih keluar secara automatik untuk menampung elemen yang lebih baharu.

Contoh Penggunaan

Untuk menggunakan kelas FixedSizedQueue<T>, buat contoh dan tetapkan atribut Limit kepada kapasiti tertinggi yang dikehendaki:

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

Selepas itu, cuma panggil kaedah Enqueue untuk menambah elemen baharu pada sejarah:

<code class="language-csharp">browserHistory.Enqueue("www.google.com");</code>

Apabila anda menambah lebih banyak URL, URL tertua akan dibatalkan secara automatik, mengekalkan kapasiti yang diperlukan sebanyak 100 URL dalam sejarah.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Baris Bersaiz Tetap dengan Penyahgantian Automatik dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn