Comment générer des fichiers PDF avec Async et le multithreading

Comment générer des PDF avec Async & Multithreading en C#

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

IronPDF permet de générer des PDF hautes performances en C# à l'aide d'opérations asynchrones et du multithreading, réduisant ainsi le temps de traitement par lots jusqu'à 65 % par rapport aux méthodes synchrones pour les scénarios de rendu HTML complexes.

<TODO : Ajouter une image ici -->

<Description : Diagramme ou capture d'écran illustrant le concept de code -->

Démarrage rapide : Convertir HTML en PDF de manière asynchrone avec IronPDF

Commencez avec la génération de PDF asynchrone en utilisant IronPDF en seulement quelques lignes de code.

Avec la méthode RenderHtmlAsPdfAsync, vous pouvez convertir efficacement le contenu HTML en PDF, optimisant les performances de votre application. Ce guide montre comment tirer parti des opérations asynchrones pour une génération de PDF performante, idéale pour le traitement par lots et les environnements multithreads.

Nuget IconCommencez dès maintenant à créer des PDF avec NuGet :

  1. Installez IronPDF avec le gestionnaire de packages NuGet

    PM > Install-Package IronPdf

  2. Copiez et exécutez cet extrait de code.

    var pdf = await IronPdf.ChromePdfRenderer.RenderHtmlAsPdfAsync("<h1>Hello World!</h1>");
  3. Déployez pour tester sur votre environnement de production.

    Commencez à utiliser IronPDF dans votre projet dès aujourd'hui grâce à un essai gratuit.
    arrow pointer


Comment implémenter la génération asynchrone de PDF en C#?

IronPDF prend entièrement en charge les opérations asynchrones à l'aide de méthodes de rendu telles que RenderHtmlAsPdfAsync. La mise en œuvre asynchrone dans IronPDF s'appuie sur le modèle asynchrone basé sur les tâches (TAP) pour permettre des opérations de génération de PDF non bloquantes. Cette approche bénéficie au rendu de contenu HTML complexe ou au traitement simultané de requêtes PDF.

La génération asynchrone de PDF empêche le gel de l'interface utilisateur dans les applications de bureau et améliore le débit des requêtes dans les applications web. L'utilisation des modèles async/await permet à votre application de traiter d'autres opérations en attendant que le rendu du PDF soit terminé, ce qui améliore considérablement la réactivité et l'expérience de l'utilisateur.

Pourquoi utiliser des méthodes asynchrones pour la génération de PDF ? Les méthodes asynchrones offrent des avantages clés pour les flux de travail de génération de PDF. Ils maintiennent la réactivité des applications lors d'opérations gourmandes en ressources, permettent une meilleure utilisation des ressources sur les processeurs multicœurs et améliorent l'évolutivité dans les environnements de serveurs. Lors de la gestion de [conversions HTML à PDF complexes](/tutorials/html-to-pdf/), les opérations asynchrones évitent les problèmes de dépassement de délai et améliorent l'expérience de l'utilisateur. ```csharp :path=/static-assets/pdf/content-code-examples/how-to/async-async.cs ```

Quels sont les modèles courants de traitement par lots ? Le traitement par lots des PDF nécessite une attention particulière à l'utilisation de la mémoire et aux performances. Les modèles efficaces comprennent l'utilisation de `Task.WhenAll` pour l'exécution parallèle de plusieurs générations de PDF, la mise en œuvre de modèles producteur-consommateur avec des canaux pour les lots importants, et l'utilisation d'[exemples de traitement parallèle](/examples/parallel/) à partir de la documentation d'IronPDF. ```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; } ``` ### Comment gérer les erreurs dans les opérations PDF asynchrones ? La gestion des erreurs dans les opérations PDF asynchrones nécessite des stratégies complètes de gestion des exceptions. Utilisez des blocs try-catch dans les méthodes asynchrones, mettez en œuvre une logique de relance pour les échecs transitoires et envisagez d'utiliser Polly pour des politiques de relance avancées. Pour un [dépannage détaillé des performances](/troubleshooting/ironpdf-performance-assistance/), IronPDF offre des fonctionnalités de journalisation étendues. ```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"); } ``` ## Comment utiliser le multithreading pour la génération de PDF? IronPDF est à l'abri des threads et prend en charge le multithreading lorsqu'il utilise le moteur de rendu `ChromePdfRenderer`. Notez que le multithreading est limité sur les machines macOS. Le [moteur de rendu Chrome](/how-to/ironpdf-2021-chrome-rendering-engine-eap/) offre d'excellentes caractéristiques de sécurité des threads et de performance pour les opérations concurrentes. The Parallel.ForEach pattern works well for batch processing PDFs, allowing you to leverage all available CPU cores effectively. Pour des [exemples complets de génération multithread](/examples/threading/), reportez-vous à la documentation d'IronPDF. ### Quand choisir le multithreading plutôt que l'asynchrone? Le multithreading est idéal pour les opérations liées à l'unité centrale, lorsque vous devez traiter plusieurs PDF simultanément avec des ressources système suffisantes. Choisissez le multithreading lorsque vous traitez des lots importants de PDF sur des systèmes multicœurs, lorsque chaque génération de PDF est indépendante et lorsque l'utilisation de la mémoire peut être contrôlée. Async est meilleur pour les opérations liées aux E/S et pour maintenir la réactivité de l'application.

Quelles sont les considérations relatives à la sécurité des threads ? Le `ChromePdfRenderer` d'IronPDF est conçu pour être thread-safe, mais certaines considérations s'appliquent. Créez des instances de rendu distinctes pour chaque thread lorsque vous utilisez des paramètres personnalisés, évitez de partager des instances `PdfDocument` entre les threads sans synchronisation, et surveillez la consommation de mémoire lors du traitement simultané de documents volumineux. La [vue d'ensemble de l'installation](/get-started/installation-overview/) fournit des détails supplémentaires sur la configuration d'IronPdf pour une sécurité optimale des threads. ```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"); }); } ``` ### Combien de threads simultanés dois-je utiliser? Le nombre optimal de threads simultanés dépend des cœurs du processeur, de la mémoire disponible et de la complexité du PDF. Les directives générales comprennent l'utilisation de `Environment.ProcessorCount` pour les opérations liées au processeur, la limitation à 2-4 threads pour les PDF gourmands en mémoire, et la surveillance des ressources du système pour trouver la configuration optimale. Les [exemples d'async](/examples/async/) démontrent différentes stratégies de threading. ## Quelles améliorations des performances puis-je attendre? Une comparaison montre des différences de performance significatives entre les approches de rendu. Un délai de 5 secondes est ajouté au rendu avec la classe [WaitFor pour simuler un rendu HTML complexe](/how-to/waitfor/). Vous trouverez ci-dessous un tableau comparatif des performances obtenues à l'aide des différentes techniques décrites ci-dessus. ### Pourquoi l'asynchrone est-il plus performant que le synchrone?
Rendu normal Rendu asynchrone Rendu multithread
15.75 secondes 05.59 secondes 05.68 secondes
Les opérations asynchrones sont excellentes parce qu'elles permettent une gestion efficace des ressources du pool de threads, empêchent le blocage du thread principal et permettent une meilleure utilisation de l'unité centrale pendant les opérations d'entrée/sortie. L'amélioration des performances provient du lancement simultané de plusieurs opérations de rendu au lieu d'attendre que chacune d'entre elles se termine de manière séquentielle.

Comment puis-je mesurer les performances de mon application ? Pour mesurer les performances de la génération de PDF, il est nécessaire de procéder à une analyse comparative et à un suivi appropriés. Utilisez `System.Diagnostics.Stopwatch` pour des mesures de temps précises, mettez en œuvre des compteurs de performance personnalisés pour la surveillance de la production et tirez parti d'applications insights ou d'outils APM similaires. Envisagez d'utiliser les exemples du [guide de démarrage rapide](/get-started/quickstart/) comme base de référence pour les tests de performance. ```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; } ```

Quels sont les facteurs qui influencent la vitesse de génération des PDF ? Plusieurs facteurs influent sur les performances de la génération de PDF. La complexité du HTML, y compris l'exécution de JavaScript et le rendu CSS, affecte directement le temps de traitement. Le chargement de ressources externes, telles que les images et les polices, peut entraîner des retards. Les ressources système telles que l'unité centrale, la mémoire et les entrées/sorties de disque jouent un rôle crucial. La configuration d'IronPDF, notamment les options de rendu et les paramètres du moteur, influe également sur la vitesse. La compréhension de ces facteurs permet d'optimiser votre flux de travail de génération de PDF pour une efficacité maximale. Pour les scénarios complexes impliquant un JavaScript lourd ou un rendu différé, envisagez d'utiliser des mécanismes [WaitFor](/how-to/waitfor/) pour garantir un rendu complet de la page avant la génération du PDF. Cette approche garantit un résultat précis tout en maintenant des caractéristiques de performance prévisibles.

Questions Fréquemment Posées

Quelle amélioration des performances puis-je attendre de la génération asynchrone de PDF ?

Les opérations asynchrones et le multithreading d'IronPDF peuvent réduire le temps de traitement par lots jusqu'à 65 % par rapport aux méthodes synchrones, en particulier lors du rendu de contenus HTML complexes. Le gain de performance réel dépend de facteurs tels que la complexité du HTML, les ressources du système et le nombre d'opérations simultanées.

Quel est le moyen le plus simple de convertir HTML en PDF de manière asynchrone ?

La méthode la plus simple consiste à utiliser la méthode RenderHtmlAsPdfAsync d'IronPDF. Une seule ligne de code suffit : `var pdf = await IronPdf.ChromePdfRenderer.RenderHtmlAsPdfAsync("Hello World !");`, vous pouvez convertir efficacement du contenu HTML en PDF tout en maintenant la réactivité de l'application.

Pourquoi devrais-je utiliser des méthodes asynchrones au lieu de la génération synchrone de PDF ?

Les méthodes asynchrones dans IronPDF empêchent le gel de l'interface utilisateur dans les applications de bureau, améliorent le débit des requêtes dans les applications web, permettent une meilleure utilisation des ressources sur les processeurs multicœurs et améliorent l'évolutivité dans les environnements de serveur. Elles sont particulièrement utiles lors de la conversion complexe de HTML en PDF ou du traitement simultané de plusieurs demandes de PDF.

Quel modèle asynchrone la bibliothèque utilise-t-elle pour les opérations PDF ?

IronPDF met en œuvre le modèle asynchrone basé sur les tâches (TAP) pour ses opérations asynchrones, notamment des méthodes telles que RenderHtmlAsPdfAsync. Ce modèle permet des opérations de génération de PDF non bloquantes et s'intègre parfaitement aux mots-clés async/await de C#.

Comment puis-je traiter plusieurs PDF en parallèle pour améliorer les performances ?

IronPDF prend en charge le traitement par lots à l'aide de modèles tels que Task.WhenAll pour l'exécution parallèle de plusieurs générations de PDF, Parallel.ForEach pour le multithreading dans le traitement des PDF, et les modèles producteur-consommateur avec canaux pour les lots de grande taille. Ces approches optimisent l'utilisation des ressources et réduisent considérablement le temps de traitement total.

Chipego
Ingénieur logiciel
Chipego a une aptitude naturelle à l'écoute qui l'aide à comprendre les problèmes des clients et à proposer des solutions intelligentes. Il a rejoint l'équipe Iron Software en 2023, après avoir étudié un baccalauréat en sciences en technologie de l'information. IronPDF et IronOCR sont les deux produits sur lesquels ...
Lire la suite
Prêt à commencer?
Nuget Téléchargements 16,685,821 | Version : 2025.12 vient de sortir