.NET幫助 C#並行Foreach(開發者工作方式) Jacob Mellor 更新:2025年6月22日 下載 IronPDF NuGet 下載 DLL 下載 Windows Installer 開始免費試用 LLM副本 LLM副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 C#中的Parallel.ForEach是什麼? Parallel.ForEach 是C#中一個方法,允許您對集合或數據來源進行平行迭代。 與依次處理集合中的每個項目不同,平行迴圈允許並行執行,這可以通過縮短總執行時間顯著提高性能。平行處理通過在多個核心處理器上分配工作來運作,使任務可以同時運行。 這特別適用於彼此獨立的處理任務。 與通常按順序處理項目的普通foreach迴圈相比,平行方法可以通過平行使用多個線程來更快地處理大型數據集。 為什麼要在IronPDF中使用平行處理? IronPDF 是一個強大的程式庫,用於在.NET中處理PDF,可以將HTML轉換為PDF、從PDF中提取文字、合併和拆分文件等等。 當處理大批量的PDF任務時,與Parallel.ForEach一起使用平行處理可以顯著減少執行時間。無論是生成數百個PDF還是一次從多個文件中提取數據,利用IronPDF的數據平行處理可以確保任務更快、更有效地完成。 本指南適用於希望使用IronPDF和Parallel.ForEach優化其PDF處理任務的.NET開發者。 建議具備C#的基本知識和對IronPDF程式庫的熟悉程度。 在本指南結束時,您將能夠實現平行處理,以同時處理多個PDF任務,提高性能和可擴展性。 入門指南 安裝IronPDF 要在您的專案中使用IronPDF,您需要透過NuGet安裝該程式庫。 NuGet套件安裝 要安裝IronPDF,請按照以下步驟操作: 在Visual Studio中打開您的專案。 轉到工具 → NuGet套件管理器 → 為解決方案管理NuGet套件。 在NuGet套件管理器中搜尋IronPDF。 點擊安裝以將IronPDF程式庫添加到您的專案中。 或者,您可以透過NuGet套件管理器控制台安裝它: Install-Package IronPdf 一旦安裝了IronPDF,您就可以開始使用它來執行PDF生成和操作任務。 Basic Concepts of Parallel.ForEach in C# Parallel.ForEach 是 System.Threading.Tasks 命名空間的一部分,提供了一種簡單而有效的方法來並行執行迭代。 Parallel.ForEach 的語法如下: Parallel.ForEach(collection, item => { // Code to process each item }); Parallel.ForEach(collection, item => { // Code to process each item }); $vbLabelText $csharpLabel 集合中的每個項目都會被平行處理,系統會決定如何在可用線程間分配工作負載。 您還可以指定選項來控制平行度,例如使用的最大線程數。 相比之下,傳統的foreach迴圈依次處理每個項目,而平行迴圈可以同時處理多個項目,從而在處理大型集合時提高性能。 逐步實施 設置專案 首先,確保已安裝IronPDF,如快速入門部分所述。 之後,您可以開始編寫您的平行PDF處理邏輯。 編寫平行處理邏輯 代碼片段:使用Parallel.ForEach進行HTML到PDF轉換 string[] htmlFiles = { "page1.html", "page2.html", "page3.html" }; Parallel.ForEach(htmlFiles, htmlFile => { // Load the HTML content into IronPDF and convert it to PDF ChromePdfRenderer renderer = new ChromePdfRenderer(); PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlFile); // Save the generated PDF to the output folder pdf.SaveAs($"output_{htmlFile}.pdf"); }); string[] htmlFiles = { "page1.html", "page2.html", "page3.html" }; Parallel.ForEach(htmlFiles, htmlFile => { // Load the HTML content into IronPDF and convert it to PDF ChromePdfRenderer renderer = new ChromePdfRenderer(); PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlFile); // Save the generated PDF to the output folder pdf.SaveAs($"output_{htmlFile}.pdf"); }); $vbLabelText $csharpLabel 此代碼演示如何平行將多個HTML頁面轉換為PDF。 處理平行處理錯誤 在處理平行任務時,錯誤處理至關重要。 在Parallel.ForEach迴圈內使用try-catch塊來管理任何異常。 代碼片段:平行PDF任務中的錯誤處理 Parallel.ForEach(pdfFiles, pdfFile => { try { var pdf = IronPdf.PdfDocument.FromFile(pdfFile); string text = pdf.ExtractAllText(); System.IO.File.WriteAllText($"extracted_{pdfFile}.txt", text); } catch (Exception ex) { Console.WriteLine($"Error processing {pdfFile}: {ex.Message}"); } }); Parallel.ForEach(pdfFiles, pdfFile => { try { var pdf = IronPdf.PdfDocument.FromFile(pdfFile); string text = pdf.ExtractAllText(); System.IO.File.WriteAllText($"extracted_{pdfFile}.txt", text); } catch (Exception ex) { Console.WriteLine($"Error processing {pdfFile}: {ex.Message}"); } }); $vbLabelText $csharpLabel 實用案例與完整代碼示例 同時從多個PDF中提取文字 平行處理的另一個用例是從一批PDF中提取文字。 在處理多個PDF文件時,同時進行文字提取可以節省大量時間。以下示例演示了如何實現。 示例:從多個文件中平行提取文字 using IronPdf; using System.Linq; using System.Threading.Tasks; class Program { static void Main(string[] args) { string[] pdfFiles = { "doc1.pdf", "doc2.pdf", "doc3.pdf" }; Parallel.ForEach(pdfFiles, pdfFile => { var pdf = IronPdf.PdfDocument.FromFile(pdfFile); string text = pdf.ExtractText(); System.IO.File.WriteAllText($"extracted_{pdfFile}.txt", text); }); } } using IronPdf; using System.Linq; using System.Threading.Tasks; class Program { static void Main(string[] args) { string[] pdfFiles = { "doc1.pdf", "doc2.pdf", "doc3.pdf" }; Parallel.ForEach(pdfFiles, pdfFile => { var pdf = IronPdf.PdfDocument.FromFile(pdfFile); string text = pdf.ExtractText(); System.IO.File.WriteAllText($"extracted_{pdfFile}.txt", text); }); } } $vbLabelText $csharpLabel 輸出文件 在這段代碼中,每個PDF文件都會被平行處理以提取文字,並將提取的文字儲存在單獨的文本文件中。 示例:平行批量從HTML文件生成PDF 在此示例中,我們將從HTML文件列表中平行生成多個PDF,這可能是當您需要將幾個動態HTML頁面轉換為PDF文件時的典型情景。 代碼 using IronPdf; using System; using System.Threading.Tasks; class Program { static void Main(string[] args) { string[] htmlFiles = { "example.html", "example_1.html", "example_2.html" }; Parallel.ForEach(htmlFiles, htmlFile => { try { // Load the HTML content into IronPDF and convert it to PDF ChromePdfRenderer renderer = new ChromePdfRenderer(); PdfDocument pdf = renderer.RenderHtmlFileAsPdf(htmlFile); // Save the generated PDF to the output folder pdf.SaveAs($"output_{htmlFile}.pdf"); Console.WriteLine($"PDF created for {htmlFile}"); } catch (Exception ex) { Console.WriteLine($"Error processing {htmlFile}: {ex.Message}"); } }); } } using IronPdf; using System; using System.Threading.Tasks; class Program { static void Main(string[] args) { string[] htmlFiles = { "example.html", "example_1.html", "example_2.html" }; Parallel.ForEach(htmlFiles, htmlFile => { try { // Load the HTML content into IronPDF and convert it to PDF ChromePdfRenderer renderer = new ChromePdfRenderer(); PdfDocument pdf = renderer.RenderHtmlFileAsPdf(htmlFile); // Save the generated PDF to the output folder pdf.SaveAs($"output_{htmlFile}.pdf"); Console.WriteLine($"PDF created for {htmlFile}"); } catch (Exception ex) { Console.WriteLine($"Error processing {htmlFile}: {ex.Message}"); } }); } } $vbLabelText $csharpLabel 控制台輸出 PDF輸出 說明 HTML文件:陣列htmlFiles包含您要轉換為PDF的多個HTML文件的路徑。 平行處理: Parallel.ForEach(htmlFiles, htmlFile => {...})同時處理每個HTML文件,這在處理多個文件時加快了操作速度。 對於renderer.RenderHtmlFileAsPdf(htmlFile);將其轉換為PDF。 保存PDF:生成PDF後,使用pdf.SaveAs方法保存,並將輸出文件名與原始HTML文件名一起保存。 錯誤處理:如果發生任何錯誤(例如,HTML文件不存在或轉換過程中出現問題),則會被try-catch塊捕獲,並列印特定文件的錯誤消息。 性能提示和最佳實踐 避免IronPDF的線程安全問題 IronPDF對大多數操作都是線程安全的。 然而,某些操作例如在同一文件上平行寫入可能會導致問題。 始終確保每個平行任務處理一個單獨的輸出文件或資源。 優化大型數據集的平行處理 為了優化性能,考慮控制平行度。 對於大數據集,您可能需要限制並行線程的數量以防止系統過載。 var options = new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 4 }; var options = new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 4 }; $vbLabelText $csharpLabel 平行PDF操作中的內存管理 處理大量PDF時,請注意內存使用。 儘量在不再需要時釋放諸如PdfDocument之類的資源。 使用擴展方法 擴展方法是一種特殊的靜態方法,允許您在不修改源代碼的情況下向現有類型添加新功能。 這在使用像IronPDF這樣的程式庫時非常有用,您可能希望添加自定義的處理方法或擴展其功能,以便在平行處理場景中更方便地處理PDF。 在平行處理中使用擴展方法的好處 通過使用擴展方法,您可以創造簡潔的、可重用的代碼,簡化平行迴圈中的邏輯。 此方法不僅減少了重複,而且在處理複雜的PDF工作流程和數據平行處理時幫助您保持代碼庫的整潔。 結論 使用像Parallel.ForEach 這樣的平行迴圈與IronPDF一起可以在處理大量PDF時獲得顯著的性能提升。 無論您是在將HTML轉換為PDF、提取文字還是操作文件,數據平行處理通過任務的同時執行實現更快的執行速度。 平行方法確保操作可以在多個核心處理器上執行,這可以減少整體執行時間,提高批量處理任務的性能。 雖然平行處理加快了任務速度,但要注意線程安全和資源管理。 IronPDF對大多數操作都是線程安全的,但在訪問共用資源時處理可能的衝突很重要。 考慮錯誤處理和內存管理,以確保穩定性,特別是在您的應用程式擴展時。 如果您準備更深入研究IronPDF並探索其高級功能,官方文檔提供了豐富的信息。 此外,您可以利用其試用授權,允許您在自己的專案中測試程式庫,再決定購買。 常見問題解答 如何在 C# 中同時將多個 HTML 文件轉換為 PDF? 您可以使用 IronPDF 和 Parallel.ForEach 方法同時將多個 HTML 文件轉換為 PDF。這種方法利用並行處理來增強效能,減少總執行時間。 在 C# 中使用 Parallel.ForEach 進行 PDF 處理有什麼好處? 使用 Parallel.ForEach 與 IronPDF 可以進行 PDF 任務的並行執行,大大提高效能,特別是在處理大量文件時。此方法利用多核來更高效地處理 HTML 到 PDF 轉換和文字擷取等任務。 如何安裝用於平行處理任務的 .NET PDF 函式庫? 要在您的 .NET 專案中安裝 IronPDF,開啟 Visual Studio,導航到工具 → NuGet 套件管理員 → 管理方案的 NuGet 套件。搜尋 IronPDF 並按安裝。或者,使用 NuGet 套件管理員控制台並輸入命令:Install-Package IronPDF。 在平行 PDF 處理中,處理錯誤的最佳做法是什麼? 在使用 IronPDF 處理平行 PDF 時,在 Parallel.ForEach 迴圈中使用 try-catch 塊來處理例外。這確保了穩健的錯誤管理,防止個別任務失敗影響整個過程。 IronPDF 能夠同時從多個 PDF 擷取文字嗎? 是的,IronPDF 可以使用 Parallel.ForEach 方法同時從多個 PDF 提取文字,實現並行處理以高效處理大型數據集。 IronPDF 是否在並行 PDF 操作中是線程安全的? IronPDF 設計為大多數操作是線程安全的。但是,重要的是要確保每個平行任務操作在不同的資源上,例如不同的文件,以避免衝突並確保數據完整性。 如何在 C# 中的平行 PDF 操作中改進記憶體管理? 為了優化記憶體管理,在使用大量 PDF 處理時,請立即釋放資源,例如 PdfDocument 物件。這有助於保持最佳記憶體使用和系統效能。 延伸方法在 C# 的平行 PDF 處理中扮演什麼角色? 延伸方法允許您在不修改其原始碼的情況下為現有型別新增功能。它們在使用 IronPDF 進行平行 PDF 處理中很有用,可創建可重用的精簡程式碼,簡化平行迴圈中的操作。 如何在 C# 中控制 PDF 任務的並行度? 在 C# 中,您可以使用 ExecutionDataflowBlockOptions 等選項來控制 PDF 任務的並行度,以限制並行線程的數量。這有助於有效管理系統資源並防止過載。 Jacob Mellor 立即與工程團隊聊天 首席技術官 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技術的創新,同時指導下一代技術領導者。 相關文章 更新2026年2月20日 銜接 CLI 簡化與 .NET : 使用 Curl DotNet 與 IronPDF for .NET Jacob Mellor 藉由 CurlDotNet 彌補了這方面的不足,CurlDotNet 是為了讓 .NET 生態系統能熟悉 cURL 而建立的函式庫。 閱讀更多 更新2025年12月20日 RandomNumberGenerator C# 使用RandomNumberGenerator C#類可以幫助將您的PDF生成和編輯項目提升至新水準 閱讀更多 更新2025年12月20日 C#字符串等於(它如何對開發者起作用) 當結合使用強大的PDF庫IronPDF時,開關模式匹配可以讓您構建更智能、更清晰的邏輯來進行文檔處理 閱讀更多 C#匿名物件(開發者如何理解其工作)C# 可枚舉 (如何為開發人員...
更新2026年2月20日 銜接 CLI 簡化與 .NET : 使用 Curl DotNet 與 IronPDF for .NET Jacob Mellor 藉由 CurlDotNet 彌補了這方面的不足,CurlDotNet 是為了讓 .NET 生態系統能熟悉 cURL 而建立的函式庫。 閱讀更多