PDF-Erzeugung mit Async und Multithreading
Async und Threading sind nützlich bei der Erstellung vonhochleistungs-PDFs in C# und VB.NET mit IronPDF in Stapeln oder für optimierte Leistung.
Erste Schritte mit IronPDF
Beginnen Sie noch heute mit der Verwendung von IronPDF in Ihrem Projekt mit einer kostenlosen Testversion.
PDF-Erzeugung mit Async und Multithreading
- Laden Sie IronPDF von NuGet herunter, um mit der asynchronen und multithreadingfähigen PDF-Erzeugung zu beginnen
- Bereiten Sie die zu konvertierenden HTML-Inhalte vor
- Verwenden Sie die
RenderHtmlAsPdfAsync
methode zur asynchronen Konvertierung von HTML in PDF mit IronPDF - Erkunden Sie mit dem
Parallel.ForEach
methode für Multithreading bei der PDF-Verarbeitung - Überprüfung des Leistungsvergleichs verschiedener PDF-Generierungstechniken
Asynchrones Beispiel
IronPDF unterstützt Async vollständig, indem es seine Async-Rendering-Methoden wie die Methode "RenderHtmlAsPdfAsync" verwendet.
:path=/static-assets/pdf/content-code-examples/how-to/async-async.cs
using IronPdf;
using System.Threading.Tasks;
// Instantiate ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
string[] htmlStrings = {"<h1>Html 1</h1>", "<h1>Html 2</h1>", "<h1>Html 3</h1>"};
// Create an array to store the tasks for rendering
var renderingTasks = new Task<PdfDocument>[htmlStrings.Length];
for (int i = 0; i < htmlStrings.Length; i++)
{
int index = i; // Capturing the loop variable
renderingTasks[i] = Task.Run(async () =>
{
// Render HTML to PDF
return await renderer.RenderHtmlAsPdfAsync(htmlStrings[index]);
});
}
// Wait for all rendering tasks to complete
// await Task.WhenAll(renderingTasks);
Imports IronPdf
Imports System.Threading.Tasks
' Instantiate ChromePdfRenderer
Private renderer As New ChromePdfRenderer()
Private htmlStrings() As String = {"<h1>Html 1</h1>", "<h1>Html 2</h1>", "<h1>Html 3</h1>"}
' Create an array to store the tasks for rendering
Private renderingTasks = New Task(Of PdfDocument)(htmlStrings.Length - 1){}
For i As Integer = 0 To htmlStrings.Length - 1
Dim index As Integer = i ' Capturing the loop variable
renderingTasks(i) = Task.Run(Async Function()
' Render HTML to PDF
Return Await renderer.RenderHtmlAsPdfAsync(htmlStrings(index))
End Function)
Next i
' Wait for all rendering tasks to complete
' await Task.WhenAll(renderingTasks);
Beispiel für Multi-Threading
IronPDF ist thread-sicher und unterstützt Multithreading, wenn die IronPdf.ChromePdfRenderer-Rendering-Engine verwendet wird.
Eine Einschränkung ist, dass Multithreading auf macOS-Rechnern begrenzt ist.
Wir haben festgestellt, dass das Muster "Parallel.ForEach" für die Stapelverarbeitung von PDF-Dateien sehr hilfreich ist.
:path=/static-assets/pdf/content-code-examples/how-to/async-multi-thread.cs
using IronPdf;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Threading.Tasks;
var queue = new List<string>() { "<h1>Html 1</h1>", "<h1>Html 2</h1>", "<h1>Html 3</h1>" };
// Instantiate ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Create a list to store the rendered PDFs
List<PdfDocument> pdfResults = new List<PdfDocument>();
Parallel.ForEach(queue, html =>
{
// Render HTML to PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
// You may choose to save the PDF to disk here if needed
// For this example, we'll store it in the pdfResults list
lock (pdfResults)
{
pdfResults.Add(pdf);
}
});
Imports IronPdf
Imports System.Collections.Concurrent
Imports System.Collections.Generic
Imports System.Threading.Tasks
Private queue = New List(Of String)() From {"<h1>Html 1</h1>", "<h1>Html 2</h1>", "<h1>Html 3</h1>"}
' Instantiate ChromePdfRenderer
Private renderer As New ChromePdfRenderer()
' Create a list to store the rendered PDFs
Private pdfResults As New List(Of PdfDocument)()
Parallel.ForEach(queue, Sub(html)
' Render HTML to PDF
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)
' You may choose to save the PDF to disk here if needed
' For this example, we'll store it in the pdfResults list
SyncLock pdfResults
pdfResults.Add(pdf)
End SyncLock
End Sub)
Leistungsvergleich
Lassen Sie uns einen Vergleich anstellen. Ich habe zusätzlich eine 5-sekündige Verzögerung beim Rendern mit derWaitFor-Klasse zur Simulation von komplexem HTML-Rendering. Nachstehend finden Sie eine Vergleichstabelle der Leistung der verschiedenen oben beschriebenen Techniken.
Normales Rendering | Asynchrones Rendering | Multithreading-Rendering |
---|---|---|
5.75 Sekunden | 5.59 Sekunden | 5.68 Sekunden |