Comment générer des PDF avec Async et Multithreading
Async et threading sont utiles lors de la génération depDF haute performance en C# et VB.NET avec IronPDF for .NET la traduction doit être réalisée par lots ou pour une performance optimisée.
Commencez avec IronPDF
Commencez à utiliser IronPDF dans votre projet dès aujourd'hui avec un essai gratuit.
Comment générer des PDF avec Async et Multithreading
- Téléchargez IronPDF à partir de NuGet pour commencer à générer des PDF asynchrones et multithreading
- Préparer le contenu HTML à convertir
- Utiliser le
RenderHtmlAsPdfAsync
méthode pour convertir HTML en PDF de manière asynchrone avec IronPDF - Explorez l'utilisation de l'outil
Parallel.ForEach
méthode pour le multithreading dans le traitement des PDF - Comparer les performances de différentes techniques de génération de PDF
Exemple asynchrone
IronPDF supporte entièrement l'Async en utilisant ses méthodes de rendu Async telles que la méthode RenderHtmlAsPdfAsync
.
: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);
Exemple de multithreading
IronPDF est sûr pour les threads et prend en charge le multithreading lorsqu'il utilise le moteur de rendu IronPdf.ChromePdfRenderer.
Le multithreading est limité sur les machines macOS.
Nous avons trouvé le modèle Parallel.ForEach
très utile pour le traitement par lots des PDF.
: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)
Comparaison des performances
Effectuons une comparaison. J'ai également ajouté un délai de 5 secondes dans le rendu avec l'optionClasse WaitFor pour simuler un rendu HTML complexe. Vous trouverez ci-dessous le tableau comparatif des performances obtenues à l'aide des différentes techniques décrites ci-dessus.
Rendu normal | Rendu asynchrone | Rendu multithread |
---|---|---|
5.75 secondes | 5.59 secondes | 5.68 secondes |