Wie man PDFs mit Async und Multithreading erstellt

PDF-Erzeugung mit Async und Multithreading in C#35;

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

IronPDF ermöglicht eine hochleistungsfähige PDF-Generierung in C# unter Verwendung von asynchronen Operationen und Multithreading, wodurch die Stapelverarbeitungszeit im Vergleich zu synchronen Methoden für komplexe HTML-Rendering-Szenarien um bis zu 65 % reduziert wird.

Schnellstart: HTML asynchron mit IronPDF in PDF konvertieren

Beginnen Sie mit der asynchronen PDF-Generierung mit IronPDF in nur wenigen Zeilen Code.

Mit der RenderHtmlAsPdfAsync-Methode können Sie HTML-Inhalte effizient in PDFs umwandeln und so die Leistung Ihrer Anwendung optimieren. Dieser Leitfaden zeigt, wie asynchrone Operationen für die hochleistungsfähige PDF-Erzeugung genutzt werden können, die sich ideal für die Stapelverarbeitung und Multi-Thread-Umgebungen eignet.

Nuget IconLegen Sie jetzt mit NuGet los, um PDFs zu erstellen:

  1. Installieren Sie IronPDF mit dem NuGet-Paketmanager.

    PM > Install-Package IronPdf

  2. Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.

    var pdf = await IronPdf.ChromePdfRenderer.RenderHtmlAsPdfAsync("<h1>Hello World!</h1>");
  3. Bereitstellen zum Testen in Ihrer Live-Umgebung

    Beginnen Sie noch heute mit der Nutzung von IronPDF in Ihrem Projekt – mit einer kostenlosen Testversion.
    arrow pointer


Wie implementiere ich asynchrone PDF-Erzeugung in C#?

IronPDF unterstützt vollständig asynchrone Operationen mit Rendering-Methoden wie RenderHtmlAsPdfAsync. Die async-Implementierung in IronPDF nutzt das Task-based Asynchronous Pattern (TAP), um nicht-blockierende PDF-Erzeugungsvorgänge zu ermöglichen. Dieser Ansatz kommt dem Rendering komplexer HTML-Inhalte oder der gleichzeitigen Verarbeitung von PDF-Anfragen zugute.

Asynchrone PDF-Generierung verhindert das Einfrieren der Benutzeroberfläche in Desktop-Anwendungen und verbessert den Anfragedurchsatz in Web-Anwendungen. Durch die Verwendung von async/await-Mustern kann Ihre Anwendung andere Operationen ausführen, während sie auf die Fertigstellung des PDF-Renderings wartet, was die Reaktionsfähigkeit und die Benutzerfreundlichkeit erheblich verbessert.

Warum sollte ich asynchrone Methoden für die PDF-Generierung verwenden?

Async-Methoden bieten entscheidende Vorteile für PDF-Generierungs-Workflows. Sie erhalten die Reaktionsfähigkeit von Anwendungen bei ressourcenintensiven Operationen aufrecht, ermöglichen eine bessere Ressourcennutzung auf Multicore-Prozessoren und verbessern die Skalierbarkeit in Serverumgebungen. Bei der Handhabung von komplexen HTML-zu-PDF-Konvertierungen verhindern asynchrone Operationen Timeout-Probleme und verbessern die Benutzerfreundlichkeit.

: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);
$vbLabelText   $csharpLabel

Was sind gängige Muster für die Stapelverarbeitung?

Die Stapelverarbeitung von PDFs erfordert eine sorgfältige Berücksichtigung von Speicherverbrauch und Leistung. Zu den effektiven Mustern gehören die Verwendung von Task.WhenAll für die parallele Ausführung mehrerer PDF-Generationen, die Implementierung von Producer-Consumer-Mustern mit Channels für große Stapel und die Verwendung von parallelen Verarbeitungsbeispielen aus der IronPDF-Dokumentation.

// Batch processing with progress tracking
public async Task<List<PdfDocument>> ProcessBatchAsync(List<string> htmlContents, IProgress<int> progress)
{
    var renderer = new ChromePdfRenderer();
    var results = new List<PdfDocument>();
    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;
}
// Batch processing with progress tracking
public async Task<List<PdfDocument>> ProcessBatchAsync(List<string> htmlContents, IProgress<int> progress)
{
    var renderer = new ChromePdfRenderer();
    var results = new List<PdfDocument>();
    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;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Wie gehe ich mit Fehlern in asynchronen PDF-Operationen um?

Die Fehlerbehandlung in asynchronen PDF-Operationen erfordert umfassende Strategien für das Ausnahmemanagement. Verwenden Sie Try-Catch-Blöcke innerhalb von asynchronen Methoden, implementieren Sie eine Wiederholungslogik für vorübergehende Fehler und erwägen Sie die Verwendung von Polly für erweiterte Wiederholungsrichtlinien. Für eine detaillierte Leistungsproblembehebung bietet IronPDF umfangreiche Protokollierungsfunktionen.

public async Task<PdfDocument> 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");
}
public async Task<PdfDocument> 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");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Wie kann ich Multi-Threading für die PDF-Generierung nutzen?

IronPDF ist thread-sicher und unterstützt Multithreading, wenn die ChromePdfRenderer Rendering-Engine verwendet wird. Beachten Sie, dass Multithreading auf macOS-Maschinen nur begrenzt möglich ist. Die Chrome-Rendering-Engine bietet hervorragende Thread-Sicherheit und Leistungsmerkmale für gleichzeitige Operationen.

The Parallel.ForEach pattern works well for batch processing PDFs, allowing you to leverage all available CPU cores effectively. Umfassende Beispiele für die Multi-Thread-Erzeugung finden Sie in der IronPDF-Dokumentation.

Wann sollte ich Multi-Threading gegenüber Async wählen?

Multi-Threading ist ideal für CPU-gebundene Operationen, bei denen Sie mehrere PDFs gleichzeitig mit ausreichenden Systemressourcen verarbeiten müssen. Entscheiden Sie sich für Multi-Threading, wenn Sie große Stapel von PDFs auf Multicore-Systemen verarbeiten, wenn jede PDF-Generierung unabhängig ist und wenn die Speichernutzung kontrolliert werden kann. Async ist besser für E/A-gebundene Operationen und die Aufrechterhaltung der Reaktionsfähigkeit von Anwendungen.

Was sind die Überlegungen zur Thread-Sicherheit?

Der ChromePdfRenderer von IronPDF ist so konzipiert, dass er thread-sicher ist, aber es gibt einige Punkte zu beachten. Erstellen Sie separate Renderer-Instanzen für jeden Thread, wenn Sie benutzerdefinierte Einstellungen verwenden, vermeiden Sie die gemeinsame Nutzung von PdfDocument-Instanzen zwischen Threads ohne Synchronisation und überwachen Sie den Speicherverbrauch bei der gleichzeitigen Verarbeitung großer Dokumente. Die Installationsübersicht bietet zusätzliche Details zur Konfiguration von IronPDF für optimale Thread-Sicherheit.

// Thread-safe PDF generation with custom settings per thread
public void ProcessPdfsInParallel(List<string> 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");
        });
}
// Thread-safe PDF generation with custom settings per thread
public void ProcessPdfsInParallel(List<string> 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");
        });
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Wie viele gleichzeitige Threads sollte ich verwenden?

Die optimale Anzahl gleichzeitiger Threads hängt von den CPU-Kernen, dem verfügbaren Speicher und der PDF-Komplexität ab. Zu den allgemeinen Richtlinien gehören die Verwendung von Environment.ProcessorCount für CPU-gebundene Operationen, die Begrenzung auf 2-4 Threads für speicherintensive PDFs und die Überwachung der Systemressourcen, um die optimale Konfiguration zu finden. Die async-Beispiele demonstrieren verschiedene Threading-Strategien.

Welche Leistungsverbesserungen kann ich erwarten?

Ein Vergleich zeigt erhebliche Leistungsunterschiede zwischen den Rendering-Ansätzen. Eine 5-Sekunden-Verzögerung wird beim Rendering mit der WaitFor-Klasse zur Simulation des komplexen HTML-Renderings hinzugefügt. Nachfolgend finden Sie eine Vergleichstabelle der Leistung bei Verwendung der verschiedenen oben beschriebenen Techniken.

Warum ist Async besser als Synchronous?

Normales Rendering Asynchrones Rendering Multithreading-Rendering
15.75 Sekunden 05.59 Sekunden 05.68 Sekunden

Async-Operationen zeichnen sich dadurch aus, dass sie eine effiziente Verwaltung von Thread-Pool-Ressourcen ermöglichen, das Blockieren des Hauptthreads verhindern und eine bessere CPU-Auslastung bei E/A-Operationen ermöglichen. Die Leistungsverbesserung ergibt sich daraus, dass mehrere Rendering-Vorgänge gleichzeitig gestartet werden, anstatt darauf zu warten, dass sie nacheinander abgeschlossen werden.

Wie kann ich die Leistung in meiner Anwendung messen?

Die Messung der Leistung der PDF-Generierung erfordert ein angemessenes Benchmarking und Monitoring. Verwenden Sie System.Diagnostics.Stopwatch für genaue Zeitmessungen, implementieren Sie benutzerdefinierte Leistungszähler für die Produktionsüberwachung, und nutzen Sie Application Insights oder ähnliche APM-Tools. Ziehen Sie in Erwägung, die Schnellstartanleitung als Grundlage für Leistungstests zu verwenden.

public async Task<PerformanceMetrics> 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;
}
public async Task<PerformanceMetrics> 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;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Welche Faktoren beeinflussen die Geschwindigkeit der PDF-Erstellung?

Mehrere Faktoren beeinflussen die Leistung der PDF-Generierung. Die Komplexität von HTML, einschließlich JavaScript-Ausführung und CSS-Rendering, wirkt sich direkt auf die Verarbeitungszeit aus. Das Laden externer Ressourcen, wie Bilder und Schriftarten, kann zu Verzögerungen führen. Systemressourcen wie CPU, Speicher und Festplatten-E/A spielen eine entscheidende Rolle. Die IronPDF-Konfiguration, einschließlich der Rendering-Optionen und Engine-Einstellungen, beeinflusst ebenfalls die Geschwindigkeit. Wenn Sie diese Faktoren verstehen, können Sie Ihren PDF-Generierungs-Workflow für maximale Effizienz optimieren.

Für komplexe Szenarien mit umfangreichem JavaScript oder verzögertem Rendering sollten Sie die Verwendung von WaitFor-Mechanismen in Betracht ziehen, um ein vollständiges Rendering der Seite vor der PDF-Generierung sicherzustellen. Dieser Ansatz garantiert eine genaue Ausgabe bei gleichzeitiger Beibehaltung vorhersehbarer Leistungsmerkmale.

Häufig gestellte Fragen

Welche Leistungsverbesserung kann ich bei der asynchronen PDF-Generierung erwarten?

Die asynchronen Operationen und das Multithreading von IronPDF können die Stapelverarbeitungszeit im Vergleich zu synchronen Methoden um bis zu 65 % reduzieren, insbesondere beim Rendern komplexer HTML-Inhalte. Der tatsächliche Leistungsgewinn hängt von Faktoren wie der Komplexität von HTML, den Systemressourcen und der Anzahl der gleichzeitigen Operationen ab.

Was ist die einfachste Methode, um HTML asynchron in PDF zu konvertieren?

Der einfachste Weg ist die Verwendung der RenderHtmlAsPdfAsync-Methode von IronPDF. Mit nur einer Zeile Code: `var pdf = await IronPdf.ChromePdfRenderer.RenderHtmlAsPdfAsync("Hello World!");` können Sie HTML-Inhalte effizient in PDF konvertieren und dabei die Reaktionsfähigkeit der Anwendung beibehalten.

Warum sollte ich asynchrone Methoden anstelle von synchroner PDF-Erzeugung verwenden?

Async-Methoden in IronPDF verhindern das Einfrieren der Benutzeroberfläche in Desktop-Anwendungen, verbessern den Anfragedurchsatz in Web-Anwendungen, ermöglichen eine bessere Ressourcennutzung auf Multicore-Prozessoren und erhöhen die Skalierbarkeit in Server-Umgebungen. Sie sind besonders vorteilhaft bei der Verarbeitung komplexer HTML-zu-PDF-Konvertierungen oder der gleichzeitigen Verarbeitung mehrerer PDF-Anfragen.

Welches asynchrone Muster verwendet die Bibliothek für PDF-Operationen?

IronPDF implementiert das Task-based Asynchronous Pattern (TAP) für seine asynchronen Operationen, einschließlich Methoden wie RenderHtmlAsPdfAsync. Dieses Muster ermöglicht nicht-blockierende PDF-Generierungsvorgänge und lässt sich nahtlos in die async/await-Schlüsselwörter von C# integrieren.

Wie kann ich mehrere PDF-Dateien parallel verarbeiten, um die Leistung zu verbessern?

IronPDF unterstützt die Stapelverarbeitung mit Mustern wie Task.WhenAll für die parallele Ausführung mehrerer PDF-Generationen, Parallel.ForEach für Multithreading bei der PDF-Verarbeitung und Producer-Consumer-Muster mit Kanälen für große Stapel. Diese Ansätze optimieren die Ressourcennutzung und reduzieren die Gesamtverarbeitungszeit erheblich.

Chipego
Software Ingenieur
Chipego hat eine natürliche Begabung fürs Zuhören, die ihm hilft, Kundenprobleme zu verstehen und intelligente Lösungen anzubieten. Er kam 2023 zum Iron Software-Team, nachdem er einen Bachelor of Science in Informationstechnologie studiert hatte. IronPDF und IronOCR sind die beiden Produkte, auf die sich Chipego konzentriert hat, aber ...
Weiterlesen
Bereit anzufangen?
Nuget Downloads 16,685,821 | Version: 2025.12 gerade veröffentlicht