>백엔드 개발 >C++ >C#에서 자동 대기열 제거 기능을 사용하여 고정 크기 대기열을 구현하려면 어떻게 해야 합니까?

C#에서 자동 대기열 제거 기능을 사용하여 고정 크기 대기열을 구현하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-13 08:21:43489검색

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

자동 대기열 제거로 C# 고정 크기 대기열 생성

많은 애플리케이션에는 고정된 수의 항목을 보유하고 항목이 가득 차면 가장 오래된 항목을 제거하는 데이터 구조가 필요합니다. 이는 최근 이벤트를 추적하거나 기록을 유지하는 데 유용합니다. 마지막으로 방문한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.