ホームページ > バックエンド開発 > C++ > C# で自動デキューを備えた固定サイズのキューを実装するにはどうすればよいですか?

C# で自動デキューを備えた固定サイズのキューを実装するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-13 08:21:43
オリジナル
489 人が閲覧しました

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

自動デキューを使用した C# 固定サイズ キューの作成

多くのアプリケーションでは、固定数の項目を保持し、いっぱいになったら最も古いものを削除するデータ構造が必要です。これは、最近のイベントを追跡したり、履歴を維持したりするのに役立ちます。 Web ブラウザが、最後にアクセスした 100 件の URL を保存する必要があると想像してください。 ConcurrentQueue<T> は機能する可能性がありますが、デキューを手動で管理するのは非効率的です。カスタム ラッパー クラスは、よりクリーンなソリューションを提供します。

FixedSizedQueue<T> クラス

このクラスは ConcurrentQueue<T> をラップし、設定されたサイズを維持するためにエンキューとデキューの両方を処理します。 クラス定義には以下が含まれます:

<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>
ログイン後にコピー

Enqueue メソッド

Enqueue メソッドは項目を追加します。 キューが制限を超えると、古いアイテムが削除されます:

<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>
ログイン後にコピー

FixedSizedQueue<T>

の使用

クラスを使用するには、インスタンスを作成し、制限を設定します。

<code class="language-csharp">var urlHistory = new FixedSizedQueue<string> { Limit = 100 };</code>
ログイン後にコピー

項目を追加すると、サイズが自動的に維持されます:

<code class="language-csharp">urlHistory.Enqueue("www.google.com");  // Enqueues the URL
urlHistory.Enqueue("www.microsoft.com"); // The oldest URL is automatically dequeued</code>
ログイン後にコピー

このアプローチは、C# で固定サイズのキューを管理するためのより洗練された効率的な方法を提供します。

以上がC# で自動デキューを備えた固定サイズのキューを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート