Przejdź do treści stopki
POMOC .NET

C# Parallel Foreach (Jak to działa dla deweloperów)

Czym jest Parallel.ForEach w C#?

Parallel.ForEach to metoda w C#, która pozwala na równoległe iteracje w kolekcji lub źródle danych. Zamiast przetwarzać każdy element w kolekcji sekwencyjnie, pętla równoległa umożliwia współbieżne wykonanie, co może znacząco poprawić wydajność poprzez skrócenie całkowitego czasu wykonania. Przetwarzanie równoległe działa przez podział pracy na wiele procesorów rdzeniowych, co pozwala na jednoczesne wykonywanie zadań. Jest to szczególnie przydatne przy przetwarzaniu zadań, które są od siebie niezależne.

W przeciwieństwie do zwykłej pętli foreach, która przetwarza elementy sekwencyjnie, podejście równoległe może obsługiwać duże zestawy danych znacznie szybciej, wykorzystując wiele wątków jednocześnie.

Dlaczego używać przetwarzania równoległego z IronPDF?

IronPDF to potężna biblioteka do obsługi PDF-ów w .NET, zdolna do konwertowania HTML na PDF, wydobywania tekstu z PDF-ów, scałania i dzielenia dokumentów i nie tylko. Podczas pracy z dużą ilością zadań PDF, użycie przetwarzania równoległego z Parallel.ForEach może znacznie skrócić czas wykonania. Niezależnie od tego, czy generujesz setki PDF-ów, czy też wydobywasz dane z wielu plików jednocześnie, wykorzystanie równoległej obróbki danych z IronPDF zapewnia, że zadania są wykonywane szybciej i bardziej efektywnie.

Ten przewodnik jest przeznaczony dla programistów .NET, którzy chcą zoptymalizować swoje zadania przetwarzania PDF z użyciem IronPDF i Parallel.ForEach. Zalecana jest podstawowa znajomość C# oraz znajomość biblioteki IronPDF. Na końcu tego przewodnika będziesz w stanie zaimplementować przetwarzanie równoległe, aby obsługiwać wiele zadań PDF jednocześnie, poprawiając zarówno wydajność, jak i skalowalność.

Pierwsze kroki

Instalacja IronPDF

Aby użyć IronPDF w swoim projekcie, musisz zainstalować bibliotekę za pośrednictwem NuGet.

Instalacja pakietu NuGet

Aby zainstalować IronPDF, postępuj zgodnie z następującymi krokami:

  1. Otwórz swój projekt w Visual Studio.
  2. Przejdź do NarzędziaMenadżer pakietów NuGetZarządzaj pakietami NuGet dla rozwiązania.
  3. Wyszukaj IronPDF w menedżerze pakietów NuGet.

C# Parallel Foreach (jak to działa dla programistów): Rysunek 1

  1. Kliknij Zainstaluj, aby dodać bibliotekę IronPDF do swojego projektu.

C# Parallel Foreach (jak to działa dla programistów): Rysunek 2

Alternatywnie można zainstalować ją za pośrednictwem konsoli Menedżera pakietów NuGet:

Install-Package IronPdf

Po zainstalowaniu IronPDF jesteś gotowy do jej używania do generowania i manipulacji PDF-ami.

Basic Concepts of Parallel.ForEach in C

Parallel.ForEach jest częścią przestrzeni nazw System.Threading.Tasks i zapewnia prosty oraz skuteczny sposób na równoczesne wykonywanie iteracji. Składnia dla Parallel.ForEach jest następująca:

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

Każdy element w kolekcji jest przetwarzany równolegle, a system decyduje, jak podzielić obciążenie między dostępne wątki. Możesz również określić opcje kontrolowania stopnia równoległości, takie jak maksymalna liczba używanych wątków.

Dla porównania, tradycyjna pętla foreach przetwarza każdy element jeden po drugim, podczas gdy pętla równoległa może przetwarzać wiele elementów jednocześnie, co poprawia wydajność przy obsłudze dużych zbiorów.

Wdrożenie krok po kroku

Konfiguracja projektu

Po pierwsze, upewnij się, że IronPDF jest zainstalowany zgodnie z opisem w sekcji Pierwsze Kroki. Po tym możesz zacząć pisać swoją logikę przetwarzania równoległego dla PDF-ów.

Tworzenie logiki przetwarzania równoległego

Fragment kodu: Używanie Parallel.ForEach do konwersji HTML na PDF

string[] htmlFiles = { "page1.html", "page2.html", "page3.html" };
Parallel.ForEach(htmlFiles, htmlFile =>
{
    // Load the HTML content into IronPDF and convert it to PDF
    ChromePdfRenderer renderer = new ChromePdfRenderer();
    PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlFile);
    // Save the generated PDF to the output folder
    pdf.SaveAs($"output_{htmlFile}.pdf");
});
string[] htmlFiles = { "page1.html", "page2.html", "page3.html" };
Parallel.ForEach(htmlFiles, htmlFile =>
{
    // Load the HTML content into IronPDF and convert it to PDF
    ChromePdfRenderer renderer = new ChromePdfRenderer();
    PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlFile);
    // Save the generated PDF to the output folder
    pdf.SaveAs($"output_{htmlFile}.pdf");
});
Dim htmlFiles() 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 renderer As New ChromePdfRenderer()
	Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlFile)
	' Save the generated PDF to the output folder
	pdf.SaveAs($"output_{htmlFile}.pdf")
End Sub)
$vbLabelText   $csharpLabel

Ten kod pokazuje, jak konwertować wiele stron HTML na PDF w trybie równoległym.

Obsługa błędów w przetwarzaniu równoległym

Podczas pracy z zadaniami równoległymi, obsługa błędów jest kluczowa. Używaj bloków try-catch wewnątrz pętli Parallel.ForEach, aby zarządzać wyjątkami.

Fragment kodu: Obsługa błędów w zadaniach równoległych PDF

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

Praktyczne przypadki użycia z pełnymi przykładami kodu

Wydobywanie tekstu z wielu PDF-ów jednocześnie

Kolejnym przypadkiem użycia przetwarzania równoległego jest wydobywanie tekstu z partii PDF-ów. Podczas pracy z wieloma plikami PDF równoczesne wydobywanie tekstu może zaoszczędzić dużo czasu. Poniższy przykład pokazuje, jak to można zrobić.

Przykład: Równoległe wydobywanie tekstu z wielu dokumentów

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
$vbLabelText   $csharpLabel

Dokumenty wynikowe

C# Parallel Foreach (jak to działa dla programistów): Rysunek 3

W tym kodzie każdy plik PDF jest przetwarzany równolegle w celu wydobyćia tekstu, a wyodrębniony tekst jest zapisywany w osobnych plikach tekstowych.

Przykład: Generowanie PDF-ów z plików HTML w partiach równolegle

W tym przykładzie wygenerujemy wiele PDF-ów z listy plików HTML równolegle, co może być typowym scenariuszem, gdy potrzebujesz przekonwertować kilka dynamicznych stron HTML na dokumenty PDF.

Kod

using IronPdf;
using System;
using System.Threading.Tasks;

class Program
{
    static void Main(string[] args)
    {
        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 renderer = new ChromePdfRenderer();
                PdfDocument pdf = renderer.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;
using System;
using System.Threading.Tasks;

class Program
{
    static void Main(string[] args)
    {
        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 renderer = new ChromePdfRenderer();
                PdfDocument pdf = renderer.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
Imports System
Imports System.Threading.Tasks

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim 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 renderer As New ChromePdfRenderer()
				Dim pdf As PdfDocument = renderer.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)
	End Sub
End Class
$vbLabelText   $csharpLabel

Wynik konsoli

C# Parallel Foreach (jak to działa dla programistów): Rysunek 4

Wynik w formacie PDF

C# Parallel Foreach (jak to działa dla programistów): Rysunek 5

Wyjaśnienie

  1. Pliki HTML: Tablica htmlFiles zawiera ścieżki do wielu plików HTML, które chcesz przekonwertować na pliki PDF.

  2. Przetwarzanie równoległe:

    • Parallel.ForEach(htmlFiles, htmlFile => {...}) przetwarza każdy plik HTML równocześnie, co przyspiesza operację przy pracy z wieloma plikami.
    • Dla każdego pliku w tablicy htmlFiles, kod konwertuje go na PDF przy użyciu renderer.RenderHtmlFileAsPdf(htmlFile);.
  3. Zapisywanie PDF: Po wygenerowaniu PDF, jest on zapisywany przy użyciu metody pdf.SaveAs, dodając do nazwy pliku wyjściowego nazwę oryginalnego pliku HTML.

  4. Obsługa błędów: Jeśli wystąpi jakikolwiek błąd (np. plik HTML nie istnieje lub wystąpi problem podczas konwersji), zostanie on wychwycony przez blok try-catch, a dla konkretnego pliku zostanie wyświetlony komunikat o błędzie.

Wskazowki dotyczące wydajności i najlepsze praktyki

Unikanie problemów z bezpieczeństwem wątków z IronPDF

IronPDF jest bezpieczny dla wątków w większości operacji. Jednak niektóre operacje, takie jak zapisywanie do tego samego pliku równocześnie, mogą powodować problemy. Zawsze upewnij się, że każda równoległa operacja działa na oddzielnym pliku wyjściowym lub zasobie.

Optymalizacja przetwarzania równoległego dla dużych zestawów danych

Aby zoptymalizować wydajność, rozważ kontrolowanie stopnia równoległości. Dla dużych zestawów danych możesz chcieć ograniczyć liczbę równoczesnych wątków, aby zapobiec przeciążeniu systemu.

var options = new ExecutionDataflowBlockOptions
{
    MaxDegreeOfParallelism = 4
};
var options = new ExecutionDataflowBlockOptions
{
    MaxDegreeOfParallelism = 4
};
Dim options = New ExecutionDataflowBlockOptions With {.MaxDegreeOfParallelism = 4}
$vbLabelText   $csharpLabel

Zarządzanie pamięcią w operacjach PDF w trybie równoległym

Podczas przetwarzania dużej liczby plików PDF zwracaj uwagę na zużycie pamięci. Spróbuj uwolnić zasoby, takie jak obiekty PdfDocument, jak tylko nie będą już potrzebne.

Używanie metod rozszerzających

Metoda rozszerzająca to specjalny rodzaj metody statycznej, która pozwala na dodanie nowej funkcjonalności do istniejącego typu bez modyfikowania jego kodu źródłowego. Może to być przydatne podczas pracy z bibliotekami takimi jak IronPDF, gdzie możesz chcieć dodać własne metody przetwarzania lub rozszerzyć ich funkcjonalność, aby uczynić pracę z PDF-ami bardziej wygodną, szczególnie w scenariuszach przetwarzania równoległego.

Zalety używania metod rozszerzających w przetwarzaniu równoległym

Dzięki użyciu metod rozszerzających możesz tworzyć zwięzły, wielokrotnego użytku kod, który upraszcza logikę w pętlach równoległych. Takie podejście nie tylko redukuje duplikację, ale również pomaga utrzymać czysty kod, szczególnie przy pracy z złożonymi procesami PDF i równoległą obróbką danych.

Wnioski

Użycie pętli równoległych takich jak Parallel.ForEach z IronPDF zapewnia znaczne przyrosty wydajności przy przetwarzaniu dużych ilości plików PDF. Niezależnie od tego, czy konwertujesz HTML na PDF-y, wydobywasz tekst, czy manipulujesz dokumentami, równoległa obróbka danych umożliwia szybsze wykonanie, wykonując zadania równocześnie. Podejście równoległe zapewnia, że operacje mogą być wykonywane na wielu procesorach, co skraca całkowity czas wykonania i poprawia wydajność przy zadaniach przetwarzania partii.

Chociaż przetwarzanie równoległe przyspiesza zadania, zwracaj uwagę na bezpieczeństwo wątków i zarządzanie zasobami. IronPDF jest bezpieczny dla wątków w większości operacji, ale ważne jest, aby radzić sobie z potencjalnymi konfliktami podczas uzyskiwania dostępu do wspólnych zasobów. Rozważ obsługę błędów i zarządzanie pamięcią, aby zapewnić stabilność, zwłaszcza gdy Twoja aplikacja się rozwija.

Jeśli jesteś gotowy, aby zagłębić się w IronPDF i odkryć zaawansowane funkcje, oficjalna dokumentacja zawiera obszerne informacje. Dodatkowo, możesz skorzystać z licencji próbnej, która pozwala przetestować bibliotekę w swoich projektach, zanim zdecydujesz się na zakup.

Często Zadawane Pytania

Jak mogę przekonwertować wiele plików HTML na PDF jednoczesnie w C#?

Możesz uzyc IronPDF z metoda Parallel.ForEach, aby jednoczesnie przekonwertować wiele plików HTML na PDF. To podejście wykorzystuje przetwarzanie wspolbiezne, aby zwiększyć wydajność poprzez zmniejszenie całkowitego czasu wykonania.

Jakie sa korzysci z używania Parallel.ForEach z przetwarzaniem PDF w C#?

Uzycie Parallel.ForEach z IronPDF pozwala na wspolbiezne wykonanie zadań PDF, znaczaco zwiększając wydajność, zwlaszcza przy pracy z duzymi ilosciami plików. Ta metoda wykorzystuje wiele rdzeni do lepszego zarządzania zadaniami, takim jak konwersja HTML na PDF i ekstrakcja tekstu.

Jak zainstalować biblioteke PDF dla zadań rownoleglych w .NET?

Aby zainstalować IronPDF do projektu .NET, otworz Visual Studio i przejdz do Narzedzia → Menedzer pakietow NuGet → Zarzadzaj pakietami NuGet dla rozwiązania. Wyszukaj IronPDF i kliknij Zainstaluj. Alternatywnie, uzyj konsoli Menedzera pakietow NuGet z komenda: Install-Package IronPdf.

Jakie sa najlepsze praktyki dotyczące obsługi błędów w rownoleglym przetwarzaniu PDF?

W rownoleglym przetwarzaniu PDF z IronPDF uzyj blokow try-catch wewnątrz pętli Parallel.ForEach do obsługi wyjątków. To zapewnia solidne zarządzanie bledami i zapobiega, aby awarie poszczegółnych zadań wpływaly na caly proces.

Czy IronPDF może jednoczesnie ekstraktowac tekst z wielu PDF?

Tak, IronPDF może jednoczesnie ekstraktowac tekst z wielu PDF, wykorzystujac metode Parallel.ForEach, umożliwiajac wspolbiezne przetwarzanie dla sprawnej obsługi duzych zbiorow danych.

Czy IronPDF jest bezpieczny dla wątków dla wspolbieznych operacji PDF?

IronPDF jest zaprojektowany tak, aby byl bezpieczny dla wątków dla wiekszosci operacji. Wazne jest jednak, aby kazde rownolegle zadanie bylo wykonywane na oddzielnych zasobach, takich jak różne pliki, aby uniknąć konfliktow i zapewnic integralnosc danych.

Jak mogę poprawić zarządzanie pamięcią podczas rownoleglych operacji PDF w C#?

Aby zoptymalizować zarządzanie pamięcią, zwalniaj zasoby takie jak obiekty PdfDocument niezwlocznie po ich użyciu, zwlaszcza podczas przetwarzania duzej liczby PDF. Pomaga to w utrzymaniu optymalnego zużycia pamięci i wydajności systemu.

Jaka role odgrywaja metody rozszerzen w rownoleglym przetwarzaniu PDF w C#?

Metody rozszerzen pozwalają dodac funkcjonalność do istniejących typow bez modyfikowania ich kodu zrodlowego. Sa przydatne w rownoleglym przetwarzaniu PDF z IronPDF do tworzenia wielokrotnego uzytku, zwiezlego kodu, upraszczajac operacje w ramach pętli rownoleglych.

Jak mogę kontrolowac stopien rownoleglosci w C# dla zadań PDF?

W C# można kontrolowac stopien rownoleglosci dla zadań PDF, korzystając z opcji takich jak ExecutionDataflowBlockOptions, aby ograniczyc liczbe wątków wspolbieznych. Pomaga to efektywnie zarządzać zasobami systemowymi i zapobiegać przeciazeniu.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczą...

Czytaj więcej

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie