如何生成非同步和多线程 PDF 文件

如何在 C# 中使用異步和多執行緒生成 PDF;

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF 可在 C# 中使用異步操作和多執行緒實現高性能 PDF 生成,與複雜 HTML 渲染場景的同步方法相比,批處理時間最多可縮短 65%。

<! -- 引言實作示意圖 --> <!--說明:說明程式碼概念的圖表或截圖 -->

快速入門:使用 IronPDF 非同步將 HTML 轉換為 PDF

只需幾行程式碼,即可使用 IronPDF 開始非同步產生 PDF。

使用RenderHtmlAsPdfAsync方法,您可以有效率地將 HTML 內容轉換為 PDF,從而優化應用程式的效能。 本指南說明如何利用 async 作業來產生高效能的 PDF,是批次處理和多執行緒環境的理想選擇。

Nuget Icon立即開始使用 NuGet 建立 PDF 檔案:

  1. 使用 NuGet 套件管理器安裝 IronPDF

    PM > Install-Package IronPdf

  2. 複製並運行這段程式碼。

    var pdf = await IronPdf.ChromePdfRenderer.RenderHtmlAsPdfAsync("<h1>Hello World!</h1>");
  3. 部署到您的生產環境進行測試

    立即開始在您的專案中使用 IronPDF,免費試用!
    arrow pointer


如何在 C# 中實現同步 PDF 生成? IronPDF 完全支援使用 `RenderHtmlAsPdfAsync` 等渲染方法的同步操作。 IronPDF 中的 [async 實作](/how-to/async/)利用基於任務的異步模式 (Task-based Asynchronous Pattern, TAP) 來實現非阻塞式 PDF 生成作業。 此方法有利於複雜的 HTML 內容呈現或同步處理 PDF 請求。 非同步 PDF 生成可防止桌面應用程式中的 UI 凍結,並提高 Web 應用程式中的請求吞吐量。 使用 `async`/`await` 模式可讓您的應用程式在等待 PDF 呈現完成時處理其他作業,大幅提升反應速度和使用者體驗。

為什麼我應該使用 Async 方法來產生 PDF? <!--說明:說明程式碼概念的圖表或截圖 --> Async 方法為 PDF 生成工作流程提供了關鍵優勢。 這些工具可在資源密集的作業中維持應用程式的回應能力,在多核心處理器上實現更好的資源利用率,並改善伺服器環境中的可擴展性。 在處理 [複雜的 HTML 至 PDF 轉換](/tutorials/html-to-pdf/)時,同步作業可防止超時問題,並改善使用者體驗。 ```csharp :path=/static-assets/pdf/content-code-examples/how-to/async-async.cs ```

批次處理的常見模式有哪些? 批次處理 PDF 需要仔細考慮記憶體使用量和效能。 有效的模式包括使用 `Task.WhenAll` 來並行執行多個 PDF 世代、使用通道來實現生產者-消費者模式來處理大量批次,以及利用 IronPDF 文件中的 [並行處理範例](/examples/parallel/)。 ```csharp // Batch processing with progress tracking public async Task> ProcessBatchAsync(List htmlContents, IProgress progress) { var renderer = new ChromePdfRenderer(); var results = new List(); var completed = 0; var tasks = htmlContents.Select(async html => { var pdf = await renderer.RenderHtmlAsPdfAsync(html); Interlocked.Increment(ref completed); progress?.Report(completed); return pdf; }); results.AddRange(await Task.WhenAll(tasks)); return results; } ```

如何處理異步 PDF 作業中的錯誤? 異步 PDF 作業中的錯誤處理需要全面的異常管理策略。 在 async 方法中使用 try-catch 區塊,針對瞬間故障實施重試邏輯,並考慮使用 Polly 進階重試原則。 對於詳細的[效能疑難排解](/troubleshooting/ironpdf-performance-assistance/),IronPDF 提供廣泛的日誌功能。 ```csharp public async Task RenderWithRetryAsync(string html, int maxRetries = 3) { var renderer = new ChromePdfRenderer(); for (int i = 0; i < maxRetries; i++) { try { return await renderer.RenderHtmlAsPdfAsync(html); } catch (Exception ex) when (i < maxRetries - 1) { // Log the exception await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, i))); // Exponential backoff } } throw new InvalidOperationException("Failed to render PDF after maximum retries"); } ```

如何使用多執行緒來產生 PDF? IronPDF 是線程安全的,使用 `ChromePdfRenderer` 渲染引擎時支援多執行緒。請注意,多執行緒在 macOS 機器上受到限制。 [Chrome 渲染引擎](/how-to/IronPdf-2021-chrome-rendering-engine-eap/) 可為並發作業提供優異的線程安全與效能特性。 The Parallel.ForEach pattern works well for batch processing PDFs, allowing you to leverage all available CPU cores effectively. 有關全面的 [多執行緒生成範例](/examples/threading/),請參閱 IronPdf 文件。

何時應該選擇多執行緒而非同步? 多執行緒是 CPU 綁定作業的理想選擇,您需要在有足夠系統資源的情況下,同時處理多個 PDF。 在多核心系統上處理大批 PDF 時、每個 PDF 生成都是獨立時,以及記憶體使用量可以控制時,請選擇多執行緒。 Async 更適合 I/O 綁定的作業,並維持應用程式的反應能力。

線程安全的注意事項有哪些? IronPDF 的 `ChromePdfRenderer` 設計為線程安全,但也有某些注意事項。 在使用自訂設定時,為每個線程建立獨立的呈現器實體,避免在線程間共用 `PdfDocument` 實體而不同步,並在並發處理大型文件時監控記憶體消耗。 [安裝概述](/get-started/installation-overview/)提供了配置 IronPDF 以獲得最佳線程安全性的其他詳細資訊。 ```csharp // Thread-safe PDF generation with custom settings per thread public void ProcessPdfsInParallel(List htmlContents) { Parallel.ForEach(htmlContents, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, html => { // Create a new renderer instance for each thread var renderer = new ChromePdfRenderer { RenderingOptions = new ChromePdfRenderOptions { MarginTop = 10, MarginBottom = 10, PaperSize = IronPdf.Rendering.PdfPaperSize.A4 } }; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs($"output_{Thread.CurrentThread.ManagedThreadId}_{DateTime.Now.Ticks}.pdf"); }); } ```

我應該使用多少個並發線程呢? 最佳並發線程數取決於 CPU 核心、可用記憶體和 PDF 的複雜性。 一般指導方針包括使用 `Environment.ProcessorCount` 執行 CPU 綁定的作業、將記憶密集的 PDF 限制為 2-4 個執行緒,以及監控系統資源以找出最佳配置。 [async範例](/examples/async/)展示了各種線程策略。

我可以期待哪些效能改善? 比較結果顯示不同的渲染方式有顯著的效能差異。 使用 [WaitFor類別模擬複雜的HTML呈現](/how-to/waitfor/)時,會在呈現的過程中加入5秒的延遲。 以下是使用上述各種技術的效能比較表。 <!--說明:螢幕截圖或圖表 -->

Why Does Async Perform Better Than Synchronous?
普通渲染 非同步渲染 多線程渲染
15.75秒 5.59秒 5.68秒
非同步作業的優點在於可以有效管理線程池的資源、防止主線程阻塞,並在 I/O 作業期間提高 CPU 的利用率。 效能改善來自同時啟動多個渲染作業,而非等待每個作業依序完成。

如何測量應用程式的效能? 衡量 PDF 生成性能需要適當的基準和監控。 使用`System.Diagnostics.Stopwatch`進行精確的定時測量、實作用於生產監控的自訂效能計數器,以及利用應用程式洞察力或類似的 APM 工具。 請考慮使用 [快速入門指南](/get-started/quickstart/)範例作為效能測試的基準。 ```csharp public async Task MeasurePerformanceAsync(string html, int iterations) { var metrics = new PerformanceMetrics(); var renderer = new ChromePdfRenderer(); var stopwatch = new Stopwatch(); // Warm-up run await renderer.RenderHtmlAsPdfAsync(html); for (int i = 0; i < iterations; i++) { stopwatch.Restart(); await renderer.RenderHtmlAsPdfAsync(html); stopwatch.Stop(); metrics.AddMeasurement(stopwatch.ElapsedMilliseconds); } return metrics; } ```

哪些因素會影響 PDF 的產生速度? 有幾個因素會影響 PDF 的產生效能。 HTML 的複雜性,包括 JavaScript 的執行和 CSS 的渲染,會直接影響處理時間。外部資源載入,例如圖片和字型,也會造成延遲。 CPU、記憶體和磁碟 I/O 等系統資源扮演關鍵角色。 IronPDF 配置(包括渲染選項和引擎設置)也會影響速度。 瞭解這些因素有助於優化 PDF 生成工作流程,以達到最高效率。 對於涉及大量 JavaScript 或延遲渲染的複雜情況,請考慮使用 [WaitFor 機制](/how-to/waitfor/),以確保在 PDF 生成之前完成頁面渲染。 此方法可確保準確輸出,同時維持可預測的效能特性。

常見問題解答

使用 async PDF 生成,性能可以提高多少?

與同步處理方法相比,IronPdf 的異步操作和多執行緒可減少高達 65% 的批次處理時間,尤其是在渲染複雜的 HTML 內容時。實際的效能增益取決於 HTML 複雜度、系統資源以及並發作業的數量等因素。

將 HTML 非同步轉換為 PDF 的最簡單方法是什麼?

最簡單的方法是使用 IronPDF 的 RenderHtmlAsPdfAsync 方法。只需一行代碼`var pdf = await IronPdf.ChromePdfRenderer.RenderHtmlAsPdfAsync("Hello World!");`,您就可以高效地將 HTML 內容轉換為 PDF,同時保持應用程式的回應能力。

為何要使用 async 方法而非同步 PDF 產生?

IronPdf 中的 Async 方法可以防止桌面應用程式中的 UI 凍結、提高 Web 應用程式中的請求吞吐量、在多核心處理器上實現更好的資源利用率,以及增強伺服器環境中的可擴展性。在處理複雜的 HTML 至 PDF 轉換或同時處理多個 PDF 請求時,它們尤其有用。

該函式庫使用何種 async 模式進行 PDF 作業?

IronPDF 在其異步操作中實現了基於任務的異步模式 (TAP),包括 RenderHtmlAsPdfAsync 等方法。此模式可實現非阻塞 PDF 生成作業,並與 C# 的 async/await 關鍵字無縫整合。

如何並行處理多個 PDF 以獲得更好的效能?

IronPDF 支援使用 Task.WhenAll 等模式進行批次處理,以平行執行多個 PDF 世代;Parallel.ForEach 可在 PDF 處理中執行多執行緒;而生產者-消費者模式則可使用通道進行大量批次處理。這些方法可最佳化資源使用,並大幅縮短總處理時間。

Chipego
軟體工程師
Chipego 擁有自然的傾聽技巧,這有助於他理解客戶問題並提供智能解決方案。他於 2023 年加入 Iron Software 團隊,擁有信息技術學士學位。IronPDF 和 IronOCR 是 Chipego 專注的兩個產品,但他對所有產品的知識日漸增長,因為他發現新的方法來支持客戶。他喜歡 Iron Software 的合作生活,來自公司的成員將他們的各種經驗帶來貢獻於有效及創新解決方案。當 Chipego 離開書桌時,他經常被発現正享受一本好書或者在踢足球。
準備好開始了嗎?
Nuget 下載 16,685,821 | 版本: 2025.12 剛發表