跳過到頁腳內容
.NET幫助

C# 隊列(開發者的工作原理)

1.簡介

在程式設計領域中,有效率的資料處理是軟體開發成功的基石。 在管理和組織資訊方面扮演重要角色的一種基本資料結構是佇列。 C# 是一種功能強大且多樣化的程式語言,在 C# 的背景下,C# Queue 成為順序管理資料的基本工具。 若要進一步瞭解 C# 中的佇列,以下是推薦的文章:C# 中的佇列.NET 中的一般佇列類

佇列遵循先入先出 (FIFO) 原則,即先加入的元素會先被移除。 此特性使其在需要以特定順序處理資料或物件的情境中特別有用,例如以系統化的方式處理任務或管理網頁伺服器中的請求。

在本文中,我們將使用 C# PDF Library IronPDF 與 C# Queue。

2.C# Queue 的類型和用途

2.1.標準佇列

C# 中的標準佇列是一個通用類別,可讓開發人員建立任何資料類型的佇列。 它提供了諸如 Enqueue 之類的方法,用於向隊列末尾添加元素,以及諸如 Dequeue 之類的方法,用於從隊列開頭移除元素。 這種類型的佇列廣泛應用於資料處理遵循嚴格順序的場景,以確保資源分配的公平性。

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    { 
        // Create an empty queue
        Queue<int> standardQueue = new Queue<int>();

        // Enqueue elements into the queue
        standardQueue.Enqueue(10);
        standardQueue.Enqueue(20);
        standardQueue.Enqueue(30);

        // Dequeue elements from the queue until it is empty
        while (standardQueue.Count > 0)
        {
            int element = standardQueue.Dequeue();
            Console.WriteLine($"Dequeued: {element}");
        }
    }
}
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    { 
        // Create an empty queue
        Queue<int> standardQueue = new Queue<int>();

        // Enqueue elements into the queue
        standardQueue.Enqueue(10);
        standardQueue.Enqueue(20);
        standardQueue.Enqueue(30);

        // Dequeue elements from the queue until it is empty
        while (standardQueue.Count > 0)
        {
            int element = standardQueue.Dequeue();
            Console.WriteLine($"Dequeued: {element}");
        }
    }
}
Imports System
Imports System.Collections.Generic

Friend Class Program
	Shared Sub Main()
		' Create an empty queue
		Dim standardQueue As New Queue(Of Integer)()

		' Enqueue elements into the queue
		standardQueue.Enqueue(10)
		standardQueue.Enqueue(20)
		standardQueue.Enqueue(30)

		' Dequeue elements from the queue until it is empty
		Do While standardQueue.Count > 0
			Dim element As Integer = standardQueue.Dequeue()
			Console.WriteLine($"Dequeued: {element}")
		Loop
	End Sub
End Class
$vbLabelText   $csharpLabel

輸出

C# Queue (How it Works For Developers):圖 1 - OUTPUT:標準佇列

2.2.優先順序佇列

在某些情況下,排定佇列中元素的優先順序變得至關重要。 C# 沒有內建優先順序佇列,但開發人員可以使用排序集合或自訂資料結構來實作優先順序佇列。 當某些元素需要根據特定標準(如緊急性或重要性)先於其他元素處理時,此類型的佇列將非常有利。

using System;
using System.Collections.Generic;

class Program
{    
    static void Main()
    {
        // Create a priority queue using a sorted set to store elements in order
        SortedSet<int> priorityQueue = new SortedSet<int>();

        // Add elements to the priority queue
        priorityQueue.Add(30);
        priorityQueue.Add(10);
        priorityQueue.Add(20);

        // Dequeue elements from the priority queue based on their priority
        while (priorityQueue.Count > 0)
        {
            // Access the minimum element (highest priority for this example)
            int element = priorityQueue.Min;
            // Remove the element from the queue
            priorityQueue.Remove(element);
            Console.WriteLine($"Priority Queue Dequeued: {element}");
        }
    }
}
using System;
using System.Collections.Generic;

class Program
{    
    static void Main()
    {
        // Create a priority queue using a sorted set to store elements in order
        SortedSet<int> priorityQueue = new SortedSet<int>();

        // Add elements to the priority queue
        priorityQueue.Add(30);
        priorityQueue.Add(10);
        priorityQueue.Add(20);

        // Dequeue elements from the priority queue based on their priority
        while (priorityQueue.Count > 0)
        {
            // Access the minimum element (highest priority for this example)
            int element = priorityQueue.Min;
            // Remove the element from the queue
            priorityQueue.Remove(element);
            Console.WriteLine($"Priority Queue Dequeued: {element}");
        }
    }
}
Imports System
Imports System.Collections.Generic

Friend Class Program
	Shared Sub Main()
		' Create a priority queue using a sorted set to store elements in order
		Dim priorityQueue As New SortedSet(Of Integer)()

		' Add elements to the priority queue
		priorityQueue.Add(30)
		priorityQueue.Add(10)
		priorityQueue.Add(20)

		' Dequeue elements from the priority queue based on their priority
		Do While priorityQueue.Count > 0
			' Access the minimum element (highest priority for this example)
			Dim element As Integer = AddressOf priorityQueue.Min
			' Remove the element from the queue
			priorityQueue.Remove(element)
			Console.WriteLine($"Priority Queue Dequeued: {element}")
		Loop
	End Sub
End Class
$vbLabelText   $csharpLabel

C# Queue (How it Works For Developers):圖 2 - OUTPUT:優先順序佇列

2.3.圓形佇列

圓形佇列是一種變體,最後一個元素與第一個元素相連,形成圓形結構。 在佇列有固定大小,且舊佇列元素需要以循環方式被新元素取代的情況下,這可能會很有利。 在 C# 中實作迴圈佇列可以優化記憶體的使用,並確保資料處理的效率。

using System;

// CircularQueue class to implement a fixed-size circular queue
class CircularQueue
{
    private int[] array;
    private int front, rear, size;

    public CircularQueue(int size)
    {
        this.size = size;
        array = new int[size];
        front = rear = -1;
    }

    // Enqueue method to add an element to the circular queue
    public void Enqueue(int item)
    {
        if ((front == 0 && rear == size - 1) || (rear == (front - 1) % (size - 1)))
        {
            Console.WriteLine("Queue is full");
            return;
        }
        else if (front == -1)  // Initial insertion case
        {
            front = rear = 0;
            array[rear] = item;
        }
        else if (rear == size - 1 && front != 0)  // Wrap around
        {
            rear = 0;
            array[rear] = item;
        }
        else  // Normal case
        {
            rear++;
            array[rear] = item;
        }
    }

    // Dequeue method to remove an element from the circular queue
    public int Dequeue()
    {
        if (front == -1)  // Queue is empty case
        {
            Console.WriteLine("Queue is empty");
            return -1;
        }

        int item = array[front];
        array[front] = -1;

        if (front == rear)  // Single element case
            front = rear = -1;
        else if (front == size - 1)  // Wrap around
            front = 0;
        else  // Normal case
            front++;

        return item;
    }
}

class Program
{
    static void Main()
    {
        // Create a circular queue with a specified initial capacity
        CircularQueue circularQueue = new CircularQueue(5);

        // Enqueue elements
        circularQueue.Enqueue(10);
        circularQueue.Enqueue(20);
        circularQueue.Enqueue(30);

        // Dequeue elements
        Console.WriteLine($"Circular Queue Dequeued: {circularQueue.Dequeue()}");
        Console.WriteLine($"Circular Queue Dequeued: {circularQueue.Dequeue()}");
    }
}
using System;

// CircularQueue class to implement a fixed-size circular queue
class CircularQueue
{
    private int[] array;
    private int front, rear, size;

    public CircularQueue(int size)
    {
        this.size = size;
        array = new int[size];
        front = rear = -1;
    }

    // Enqueue method to add an element to the circular queue
    public void Enqueue(int item)
    {
        if ((front == 0 && rear == size - 1) || (rear == (front - 1) % (size - 1)))
        {
            Console.WriteLine("Queue is full");
            return;
        }
        else if (front == -1)  // Initial insertion case
        {
            front = rear = 0;
            array[rear] = item;
        }
        else if (rear == size - 1 && front != 0)  // Wrap around
        {
            rear = 0;
            array[rear] = item;
        }
        else  // Normal case
        {
            rear++;
            array[rear] = item;
        }
    }

    // Dequeue method to remove an element from the circular queue
    public int Dequeue()
    {
        if (front == -1)  // Queue is empty case
        {
            Console.WriteLine("Queue is empty");
            return -1;
        }

        int item = array[front];
        array[front] = -1;

        if (front == rear)  // Single element case
            front = rear = -1;
        else if (front == size - 1)  // Wrap around
            front = 0;
        else  // Normal case
            front++;

        return item;
    }
}

class Program
{
    static void Main()
    {
        // Create a circular queue with a specified initial capacity
        CircularQueue circularQueue = new CircularQueue(5);

        // Enqueue elements
        circularQueue.Enqueue(10);
        circularQueue.Enqueue(20);
        circularQueue.Enqueue(30);

        // Dequeue elements
        Console.WriteLine($"Circular Queue Dequeued: {circularQueue.Dequeue()}");
        Console.WriteLine($"Circular Queue Dequeued: {circularQueue.Dequeue()}");
    }
}
Imports System

' CircularQueue class to implement a fixed-size circular queue
Friend Class CircularQueue
	Private array() As Integer
	Private front, rear, size As Integer

	Public Sub New(ByVal size As Integer)
		Me.size = size
		array = New Integer(size - 1){}
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: front = rear = -1;
		rear = -1
		front = rear
	End Sub

	' Enqueue method to add an element to the circular queue
	Public Sub Enqueue(ByVal item As Integer)
		If (front = 0 AndAlso rear = size - 1) OrElse (rear = (front - 1) Mod (size - 1)) Then
			Console.WriteLine("Queue is full")
			Return
		ElseIf front = -1 Then ' Initial insertion case
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: front = rear = 0;
			rear = 0
			front = rear
			array(rear) = item
		ElseIf rear = size - 1 AndAlso front <> 0 Then ' Wrap around
			rear = 0
			array(rear) = item
		Else ' Normal case
			rear += 1
			array(rear) = item
		End If
	End Sub

	' Dequeue method to remove an element from the circular queue
	Public Function Dequeue() As Integer
		If front = -1 Then ' Queue is empty case
			Console.WriteLine("Queue is empty")
			Return -1
		End If

		Dim item As Integer = array(front)
		array(front) = -1

		If front = rear Then ' Single element case
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: front = rear = -1;
			rear = -1
			front = rear
		ElseIf front = size - 1 Then ' Wrap around
			front = 0
		Else ' Normal case
			front += 1
		End If

		Return item
	End Function
End Class

Friend Class Program
	Shared Sub Main()
		' Create a circular queue with a specified initial capacity
		Dim circularQueue As New CircularQueue(5)

		' Enqueue elements
		circularQueue.Enqueue(10)
		circularQueue.Enqueue(20)
		circularQueue.Enqueue(30)

		' Dequeue elements
		Console.WriteLine($"Circular Queue Dequeued: {circularQueue.Dequeue()}")
		Console.WriteLine($"Circular Queue Dequeued: {circularQueue.Dequeue()}")
	End Sub
End Class
$vbLabelText   $csharpLabel

C# Queue (How it Works For Developers):圖 3 - OUTPUT:圓形佇列

3.介紹 IronPDF 的 C# 語言。

當我們深入探討 C# Queue 的功能與應用時,必須探討如何將其無縫整合至實際應用中。 IronPDF 就是這樣一個增強 C# 功能的強大工具。

IronPDF 是一個 C# 函式庫,可簡化 PDF 文件的建立、操作和渲染。 其直觀的 API 可讓開發人員從 HTML、ASPX 甚至純文字產生 PDF。 有了 IronPDF,將 C# Queue 納入 PDF 產生應用程式的過程變得簡化且有效率。

3.1.使用 C# Queue 與 IronPDF 程式碼。

讓我們仔細看看 C# Queue 如何與 IronPDF 配合使用,以建立動態且有條理的 PDF 文件。 考慮一種情況,Web 應用程式需要根據使用者的輸入和要求產生 PDF 報告。

using IronPdf;
using System;
using System.Collections.Generic;

class PdfGenerator
{
    static void Main()
    {
        // Create a C# Queue to store user requests
        Queue<string> userRequests = new Queue<string>();

        // Simulate user requests being added to the queue
        userRequests.Enqueue("Generate PDF for User 1");
        userRequests.Enqueue("Generate PDF for User 2");
        userRequests.Enqueue("Generate PDF for User 3");

        // Process requests and generate PDFs
        while (userRequests.Count > 0)
        {
            string request = userRequests.Dequeue();
            GeneratePdf(request);
        }
    }

    // Method to generate a PDF file using IronPDF
    static void GeneratePdf(string userRequest)
    {
        // Use IronPDF to generate PDF based on user request
        var Renderer = new HtmlToPdf();

        // Render the provided HTML content as a PDF
        var PDF = Renderer.RenderHtmlAsPdf($"<h1>{userRequest}</h1>");

        // Save the generated PDF with the request name as file name
        PDF.SaveAs($"{userRequest.Replace(" ", "_")}.pdf");
    }
}
using IronPdf;
using System;
using System.Collections.Generic;

class PdfGenerator
{
    static void Main()
    {
        // Create a C# Queue to store user requests
        Queue<string> userRequests = new Queue<string>();

        // Simulate user requests being added to the queue
        userRequests.Enqueue("Generate PDF for User 1");
        userRequests.Enqueue("Generate PDF for User 2");
        userRequests.Enqueue("Generate PDF for User 3");

        // Process requests and generate PDFs
        while (userRequests.Count > 0)
        {
            string request = userRequests.Dequeue();
            GeneratePdf(request);
        }
    }

    // Method to generate a PDF file using IronPDF
    static void GeneratePdf(string userRequest)
    {
        // Use IronPDF to generate PDF based on user request
        var Renderer = new HtmlToPdf();

        // Render the provided HTML content as a PDF
        var PDF = Renderer.RenderHtmlAsPdf($"<h1>{userRequest}</h1>");

        // Save the generated PDF with the request name as file name
        PDF.SaveAs($"{userRequest.Replace(" ", "_")}.pdf");
    }
}
Imports IronPdf
Imports System
Imports System.Collections.Generic

Friend Class PdfGenerator
	Shared Sub Main()
		' Create a C# Queue to store user requests
		Dim userRequests As New Queue(Of String)()

		' Simulate user requests being added to the queue
		userRequests.Enqueue("Generate PDF for User 1")
		userRequests.Enqueue("Generate PDF for User 2")
		userRequests.Enqueue("Generate PDF for User 3")

		' Process requests and generate PDFs
		Do While userRequests.Count > 0
			Dim request As String = userRequests.Dequeue()
			GeneratePdf(request)
		Loop
	End Sub

	' Method to generate a PDF file using IronPDF
	Private Shared Sub GeneratePdf(ByVal userRequest As String)
		' Use IronPDF to generate PDF based on user request
		Dim Renderer = New HtmlToPdf()

		' Render the provided HTML content as a PDF
		Dim PDF = Renderer.RenderHtmlAsPdf($"<h1>{userRequest}</h1>")

		' Save the generated PDF with the request name as file name
		PDF.SaveAs($"{userRequest.Replace(" ", "_")}.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

在這個範例中,使用 C# 佇列 (userRequests) 來儲存使用者對 PDF 產生的請求。 GeneratePdf 方法接受使用者要求,利用 IronPDF 將 HTML 內容轉換為 PDF 文檔,並將產生的 PDF 文件儲存為相關名稱。

這種整合方法也展現了 C# Queue 與 IronPDF 之間的協同效應,使用者請求的有序處理結果就是 PDF 文件的有系統建立。

3.2.輸出 #1

C# Queue (How it Works For Developers):圖 4 - OUTPUT 1: 使用 IronPDF 和 C# Queue 產生 PDF

3.3.輸出 #2

C# Queue (How it Works For Developers):圖 5 - OUTPUT 2:使用 IronPDF 和 C# Queue 產生 PDF

3.4.輸出 #3

C# Queue (How it Works For Developers):圖 6 - OUTPUT 3: 使用 IronPDF 和 C# Queue 產生 PDF

4.結論

總括而言,C# Queue 證明是依序管理和處理資料的寶貴資產。 它對先入先出原則的堅持使其適用於廣泛的應用,從任務排程到 Web 伺服器中的請求處理。 當與 IronPDF等功能強大的函式庫結合時,C# Queue 將變得更加強大,讓開發人員能有效率地建立有組織且動態的 PDF 文件。

瞭解 C# Queue 的細微差異並探討其與 IronPDF 等工具的整合,可讓開發人員設計出強大且有效率的資料管理與處理解決方案。 隨著技術的不斷演進,C# Queue 等基本資料結構與創新函式庫之間的協同效應,將在塑造軟體開發的版圖上扮演舉足輕重的角色。

有關授權資訊,請造訪 IronPDF 授權詳細資訊。 若要瞭解 HTML 至 PDF 轉換的更多資訊,請造訪 HTML 至 PDF 轉換教學

常見問題解答

C# Queue 在順序管理資料方面如何運作?

C# Queue 依據先入先出(FIFO)原則運行,確保所添加的第一個元素將是最先被移除的。這種系統化的順序非常適合需要按順序處理資料的情況。

C# 標準 Queue 中可用於資料處理的方法有哪些?

C# 標準 Queue 提供 Enqueue 方法來向 Queue 添加元素,並提供 Dequeue 方法來移除元素,從而促進通用資料類型處理。

如何在 C# 中實作一個優先級 Queue?

C# 中的優先級 Queue 可以通過已排序的集合或自訂資料結構來實作,允許基於特定條件對元素進行優先級排序,即使內建的優先級 Queue 不存在。

環形 Queue 在 C# 中有哪些優勢?

在具有固定大小 Queue 的場景中,環形 Queue 具有優勢。它們通過將 Queue 的末端回連到前端循環替換元素,有助於優化記憶體使用。

C# Queue 如何增強 PDF 生成過程?

C# Queue 可以通過順序處理每個請求,來有效管理 PDF 生成請求。使用 IronPDF,開發者可以動態創建和操作 PDF,確保每個請求按順序處理。

IronPDF 在 C# 開發中扮演什麼角色?

IronPDF 對於需要創建、操作和渲染 PDF 文檔的 C# 開發者來說是必需的。它允許將 HTML、ASPX 或純文本轉換為 PDF,擴展 C# 應用程式的功能。

C# Queue 可以用於網路伺服器請求處理嗎?

可以,C# Queue 適合用於處理網路伺服器中的請求。它以 FIFO 方式處理資料,非常適合管理諸如 HTTP 請求處理和排程這樣的任務。

如何在 C# 中創建和管理 Queue?

在 C# 中,可以使用 System.Collections.Generic 中的 Queue 類來創建 Queue。元素可以通過 Enqueue 添加,並通過 Dequeue 移除,遵循 FIFO 原則。

FIFO 原則在軟體開發中有哪些應用?

FIFO 原則對於需要系統順序的任務、資源和流程管理(例如列印假脫機、任務排程和請求處理)在軟體開發中至關重要。

如何協同使用 Queue 和 IronPDF?

Queue 可以通過優先安排請求來組織 PDF 生成任務,而 IronPDF 處理實際的 PDF 創建和操作。這種組合為高效的資料處理和文件管理提供了強有力的解決方案。

Jacob Mellor, Team Iron 首席技術官
首席技術官

Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。

Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。

他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我