AIDE .NET

C# Parallel Foreach (Comment ça fonctionne pour les développeurs)

Publié janvier 14, 2025
Partager:

Introduction

Qu'est-ce que Parallel.ForEach en C# ?

Parallel.ForEachest une méthode en C# qui vous permet d'effectuer des itérations parallèles sur une collection ou une source de données. Au lieu de traiter chaque élément de la collection de manière séquentielle, une boucle parallèle permet une exécution simultanée, ce qui peut améliorer considérablement les performances en réduisant le temps d'exécution global. Le traitement parallèle fonctionne en répartissant le travail sur plusieurs processeurs, permettant ainsi aux tâches de s'exécuter simultanément. Ceci est particulièrement utile lorsque vous traitez des tâches indépendantes les unes des autres.

Contrairement à une boucle foreach normale, qui traite les éléments séquentiellement, l'approche parallèle peut gérer des ensembles de données volumineux beaucoup plus rapidement en utilisant plusieurs threads en parallèle.

Pourquoi utiliser le traitement parallèle avec IronPDF ?

IronPDFest une bibliothèque puissante pour gérer les PDF dans .NET, capable de convertir HTML en PDF, extraction de texte à partir de PDF, fusion et division de documentset bien d'autres choses encore. Lorsque vous traitez de grands volumes de tâches PDF, l'utilisation du traitement parallèle avec Parallel.ForEach peut réduire significativement le temps d'exécution. Que vous génériez des centaines de PDFs ou que vous extrayiez des données de plusieurs fichiers à la fois, tirer parti du parallélisme de données avec IronPDF garantit que les tâches sont complétées plus rapidement et plus efficacement.

Ce guide est destiné aux développeurs .NET qui souhaitent optimiser leurs tâches de traitement PDF en utilisant IronPDF et Parallel.ForEach. Il est recommandé d'avoir une connaissance de base du C# et une familiarité avec la bibliothèque IronPDF. À la fin de ce guide, vous serez en mesure de mettre en œuvre le traitement parallèle pour gérer plusieurs tâches PDF simultanément, améliorant ainsi à la fois la performance et l'évolutivité.

Pour commencer

Installation d'IronPDF

Pour utiliserIronPDFdans votre projet, vous devez installer la bibliothèque via NuGet.

Installation du package NuGet

Pour installer IronPDF, suivez ces étapes :

  1. Ouvrez votre projet dans Visual Studio.

  2. Allez dans OutilsGestionnaire de paquetages NuGetGérer les paquetages NuGet pour la solution.

    1. Recherchez IronPDF dans le gestionnaire de packages NuGet.

    C# Parallel Foreach(Comment ça fonctionne pour les développeurs) : Figure 1

    1. Cliquez sur Installer pour ajouter la bibliothèque IronPDF à votre projet.

    C# Parallel Foreach(Comment cela fonctionne pour les développeurs) : Figure 2

    Alternativement, vous pouvez l'installer via la console du gestionnaire de packages NuGet :

Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
VB   C#

Une fois IronPDF installé, vous êtes prêt à commencer à l'utiliser pour des tâches de génération et de manipulation de PDF.

Concepts de base de Parallel.ForEach en C

Parallel.ForEach fait partie de l'espace de noms System.Threading.Tasks et offre un moyen simple et efficace d'exécuter des itérations en parallèle. La syntaxe pour Parallel.ForEach est la suivante :

Parallel.ForEach(collection, item =>
{
    // Code to process each item
});
Parallel.ForEach(collection, item =>
{
    // Code to process each item
});
Parallel.ForEach(collection, Sub(item)
	' Code to process each item
End Sub)
VB   C#

Chaque élément de la collection est traité en parallèle, et le système décide comment répartir la charge de travail sur les threads disponibles. Vous pouvez également spécifier des options pour contrôler le degré de parallélisme, comme le nombre maximal de threads utilisés.

En comparaison, une boucle foreach traditionnelle traite chaque élément l'un après l'autre, tandis qu'une boucle parallèle peut traiter plusieurs éléments simultanément, améliorant ainsi les performances lors de la gestion de grandes collections.

Mise en œuvre étape par étape

Mise en place du projet

Tout d'abord, assurez-vous qu'IronPDF est installé comme décrit dans la section Prise en main. Après cela, vous pouvez commencer à écrire votre logique de traitement PDF parallèle.

Écriture de la logique de traitement parallèle

Extrait de Code : Utilisation de Parallel.ForEach pour la Conversion de HTML en PDF

string[] htmlPages = { "page1.html", "page2.html", "page3.html" };
Parallel.ForEach(htmlFiles, htmlFile =>
{
    // Load the HTML content into IronPDF and convert it to PDF
    ChromePdfRenderer renederer = new ChromePdfRenderer();
    PdfDocument pdf = renederer.RenderHtmlAsPdf(htmlFile);
    // Save the generated PDF to the output folder
    pdf.SaveAs($"output_{htmlFile}.pdf");
 });
string[] htmlPages = { "page1.html", "page2.html", "page3.html" };
Parallel.ForEach(htmlFiles, htmlFile =>
{
    // Load the HTML content into IronPDF and convert it to PDF
    ChromePdfRenderer renederer = new ChromePdfRenderer();
    PdfDocument pdf = renederer.RenderHtmlAsPdf(htmlFile);
    // Save the generated PDF to the output folder
    pdf.SaveAs($"output_{htmlFile}.pdf");
 });
Dim htmlPages() As String = { "page1.html", "page2.html", "page3.html" }
Parallel.ForEach(htmlFiles, Sub(htmlFile)
	' Load the HTML content into IronPDF and convert it to PDF
	Dim renederer As New ChromePdfRenderer()
	Dim pdf As PdfDocument = renederer.RenderHtmlAsPdf(htmlFile)
	' Save the generated PDF to the output folder
	pdf.SaveAs($"output_{htmlFile}.pdf")
End Sub)
VB   C#

Ce code démontre comment convertir plusieurs pages HTML en PDFs en parallèle.

Gestion des erreurs de traitement parallèle

Lorsqu'il s'agit de tâches parallèles, la gestion des erreurs est cruciale. Utilisez des blocs try-catch à l'intérieur de la boucle Parallel.ForEach pour gérer les exceptions.

Extrait de code : Gestion des erreurs dans les tâches PDF parallèles

Parallel.ForEach(pdfFiles, pdfFile =>
{
    try
    {
        var pdf = IronPdf.PdfDocument.FromFile(pdfFile);
        string text = pdf.ExtractAllText();
        System.IO.File.WriteAllText($"extracted_{pdfFile}.txt", text);
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error processing {pdfFile}: {ex.Message}");
    }
});
Parallel.ForEach(pdfFiles, pdfFile =>
{
    try
    {
        var pdf = IronPdf.PdfDocument.FromFile(pdfFile);
        string text = pdf.ExtractAllText();
        System.IO.File.WriteAllText($"extracted_{pdfFile}.txt", text);
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error processing {pdfFile}: {ex.Message}");
    }
});
Parallel.ForEach(pdfFiles, Sub(pdfFile)
	Try
		Dim pdf = IronPdf.PdfDocument.FromFile(pdfFile)
		Dim text As String = pdf.ExtractAllText()
		System.IO.File.WriteAllText($"extracted_{pdfFile}.txt", text)
	Catch ex As Exception
		Console.WriteLine($"Error processing {pdfFile}: {ex.Message}")
	End Try
End Sub)
VB   C#

Cas d'utilisation pratiques avec des exemples de code complets

Extraction de texte de plusieurs PDF simultanément

Un autre cas d'utilisation du traitement parallèle est l'extraction de texte à partir d'un lot de PDF. Lorsqu'il s'agit de plusieurs fichiers PDF, effectuer l'extraction de texte de manière simultanée peut faire gagner beaucoup de temps. L'exemple suivant démontre comment cela peut être fait.

Exemple : Extraction de texte parallèle à partir de plusieurs documents

using IronPdf;
using System.Linq;
using System.Threading.Tasks;
class Program
{
    static void Main(string[] args)
    {
        string[] pdfFiles = { "doc1.pdf", "doc2.pdf", "doc3.pdf" };
        Parallel.ForEach(pdfFiles, pdfFile =>
        {
            var pdf = IronPdf.PdfDocument.FromFile(pdfFile);
            string text = pdf.ExtractText();
            System.IO.File.WriteAllText($"extracted_{pdfFile}.txt", text);
        });
    }
}
using IronPdf;
using System.Linq;
using System.Threading.Tasks;
class Program
{
    static void Main(string[] args)
    {
        string[] pdfFiles = { "doc1.pdf", "doc2.pdf", "doc3.pdf" };
        Parallel.ForEach(pdfFiles, pdfFile =>
        {
            var pdf = IronPdf.PdfDocument.FromFile(pdfFile);
            string text = pdf.ExtractText();
            System.IO.File.WriteAllText($"extracted_{pdfFile}.txt", text);
        });
    }
}
Imports IronPdf
Imports System.Linq
Imports System.Threading.Tasks
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim pdfFiles() As String = { "doc1.pdf", "doc2.pdf", "doc3.pdf" }
		Parallel.ForEach(pdfFiles, Sub(pdfFile)
			Dim pdf = IronPdf.PdfDocument.FromFile(pdfFile)
			Dim text As String = pdf.ExtractText()
			System.IO.File.WriteAllText($"extracted_{pdfFile}.txt", text)
		End Sub)
	End Sub
End Class
VB   C#

Documents de sortie

C# Parallel Foreach(Comment ça Marche pour les Développeurs) : Figure 3

Dans ce code, chaque fichier PDF est traité en parallèle pour extraire le texte, et le texte extrait est enregistré dans des fichiers texte séparés.

Exemple : Génération de PDF en lot à partir de fichiers HTML en parallèle

Dans cet exemple, nous allons générer plusieurs PDF à partir d'une liste de fichiers HTML en parallèle, ce qui pourrait être un scénario typique lorsque vous avez besoin de convertir plusieurs pages HTML dynamiques en documents PDF.

Code

using IronPdf;
string[] htmlFiles = { "example.html", "example_1.html", "example_2.html" };
Parallel.ForEach(htmlFiles, htmlFile =>
{
    try
    {
        // Load the HTML content into IronPDF and convert it to PDF
        ChromePdfRenderer renederer = new ChromePdfRenderer();
        PdfDocument pdf = renederer.RenderHtmlFileAsPdf(htmlFile);
        // Save the generated PDF to the output folder
        pdf.SaveAs($"output_{htmlFile}.pdf");
        Console.WriteLine($"PDF created for {htmlFile}");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error processing {htmlFile}: {ex.Message}");
    }
});
using IronPdf;
string[] htmlFiles = { "example.html", "example_1.html", "example_2.html" };
Parallel.ForEach(htmlFiles, htmlFile =>
{
    try
    {
        // Load the HTML content into IronPDF and convert it to PDF
        ChromePdfRenderer renederer = new ChromePdfRenderer();
        PdfDocument pdf = renederer.RenderHtmlFileAsPdf(htmlFile);
        // Save the generated PDF to the output folder
        pdf.SaveAs($"output_{htmlFile}.pdf");
        Console.WriteLine($"PDF created for {htmlFile}");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error processing {htmlFile}: {ex.Message}");
    }
});
Imports IronPdf
Private htmlFiles() As String = { "example.html", "example_1.html", "example_2.html" }
Parallel.ForEach(htmlFiles, Sub(htmlFile)
	Try
		' Load the HTML content into IronPDF and convert it to PDF
		Dim renederer As New ChromePdfRenderer()
		Dim pdf As PdfDocument = renederer.RenderHtmlFileAsPdf(htmlFile)
		' Save the generated PDF to the output folder
		pdf.SaveAs($"output_{htmlFile}.pdf")
		Console.WriteLine($"PDF created for {htmlFile}")
	Catch ex As Exception
		Console.WriteLine($"Error processing {htmlFile}: {ex.Message}")
	End Try
End Sub)
VB   C#

Sortie de la console

C# Parallel Foreach(Comment cela fonctionne pour les développeurs) : Figure 4

Sortie PDF

C# Parallel Foreach(Comment ça fonctionne pour les développeurs) : Figure 5

Explication

  1. Fichiers HTML : Le tableau htmlFiles contient des chemins vers plusieurs fichiers HTML que vous souhaitez convertir en PDF.

    1. Traitement parallèle :
  • Parallel.ForEach(fichiersHtml, fichierHtml =>{...}) traite chaque fichier HTML simultanément, ce qui accélère l'opération lorsqu'il s'agit de plusieurs fichiers.

    • Pour chaque fichier dans le tableau htmlFiles, le code le convertit en PDF en utilisant renderer.RenderHtmlFileAsPdf.(htmlFile);**
  1. Enregistrement du PDF : Après la génération du PDF, il est enregistré en utilisant la méthode pdf.SaveAs, en ajoutant le nom du fichier de sortie avec le nom du fichier HTML original.

  2. Gestion des erreurs : Si une erreur se produit(par exemple, le fichier HTML n'existe pas ou il y a un problème lors de la conversion), il est intercepté par le bloc try-catch, et un message d'erreur est imprimé pour le fichier spécifique.

Conseils de performance et meilleures pratiques

Éviter les problèmes de sécurité des threads avec IronPDF

IronPDF est sûr pour la plupart des opérations en termes de threads. Cependant, certaines opérations comme l'écriture sur le même fichier en parallèle peuvent poser des problèmes. Assurez-vous toujours que chaque tâche parallèle fonctionne sur un fichier de sortie ou une ressource séparée.

Optimiser le traitement parallèle pour les grands ensembles de données

Pour optimiser les performances, envisagez de contrôler le degré de parallélisme. Pour les grandes ensembles de données, vous pouvez vouloir limiter le nombre de threads simultanés pour éviter une surcharge du système.

var options = new ExecutionDataflowBlockOptions
{
    MaxDegreeOfParallelism = 4
};
var options = new ExecutionDataflowBlockOptions
{
    MaxDegreeOfParallelism = 4
};
Dim options = New ExecutionDataflowBlockOptions With {.MaxDegreeOfParallelism = 4}
VB   C#

Gestion de la mémoire dans les opérations PDF parallèles

Lorsque vous traitez un grand nombre de PDF, soyez attentif à l'utilisation de la mémoire. Essayez de libérer les ressources comme les objets PdfDocument dès qu'elles ne sont plus nécessaires.

Utilisation des méthodes d'extension

Une méthode d'extension est un type spécial de méthode statique qui vous permet d'ajouter de nouvelles fonctionnalités à un type existant sans modifier son code source. Cela peut être utile lorsque vous travaillez avec des bibliothèques comme IronPDF, où vous pourriez vouloir ajouter des méthodes de traitement personnalisées ou étendre sa fonctionnalité pour rendre le travail avec des PDF plus pratique, en particulier dans des scénarios de traitement parallèle.

Avantages de l'utilisation des méthodes d'extension dans le traitement parallèle

En utilisant des méthodes d'extension, vous pouvez créer du code concis et réutilisable qui simplifie la logique dans les boucles parallèles. Cette approche non seulement réduit la duplication, mais vous aide également à maintenir une base de code propre, en particulier lorsqu'il s'agit de flux de travail PDF complexes et de parallélisme des données.

Conclusion

Utilisation de boucles parallèles comme Parallel.ForEach avecIronPDFoffre des gains de performance significatifs lors du traitement de grands volumes de PDF. Que vous soyez en train de convertir du HTML en PDF, d'extraire du texte ou de manipuler des documents, le parallélisme des données permet une exécution plus rapide en exécutant des tâches simultanément. L'approche parallèle garantit que les opérations peuvent être exécutées sur plusieurs processeurs à cœur, ce qui réduit le temps d'exécution global et améliore les performances pour les tâches de traitement par lots.

Bien que le traitement parallèle accélère les tâches, soyez attentif à la sécurité des threads et à la gestion des ressources. IronPDF est sûr pour les opérations threading pour la plupart des cas, mais il est important de gérer les conflits potentiels lors de l'accès aux ressources partagées. Tenez compte de la gestion des erreurs et de la gestion de la mémoire pour garantir la stabilité, surtout à mesure que votre application évolue.

Si vous êtes prêt à plonger plus profondément dans IronPDF et à explorer des fonctionnalités avancées, ledocumentation officielle, vous permettant de tester la bibliothèque dans vos propres projets avant de vous engager à un achat.

< PRÉCÉDENT
Objet Anonyme C# (Comment cela fonctionne pour les développeurs)
SUIVANT >
C# Enumerable (Comment cela fonctionne pour les développeurs)