푸터 콘텐츠로 바로가기
.NET 도움말

C# 병렬 ForEach (개발자를 위한 작동 원리)

C#의 Parallel.ForEach란?

Parallel.ForEach는 C#에서 컬렉션이나 데이터 소스에 대해 병렬 반복을 수행할 수 있는 메서드입니다. 컬렉션의 각 항목을 순차적으로 처리하는 대신, 병렬 루프는 동시 실행을 가능하게 하여 전체 실행 시간을 단축하며 성능을 크게 향상시킬 수 있습니다. 병렬 처리는 작업을 여러 코어 프로세서에 분배하여 동시에 실행되도록 하여 작동합니다. 특히 서로 독립적인 작업을 처리할 때 유용합니다.

일반적인 foreach 루프와 달리, 병렬 접근법은 여러 스레드를 병렬로 사용하여 대량 데이터 셋을 훨씬 빠르게 처리할 수 있습니다.

IronPDF와 함께 병렬 처리를 사용하는 이유는?

IronPDF는 .NET에서 PDF를 처리하기 위한 강력한 라이브러리로, HTML을 PDF로 변환, PDF에서 텍스트 추출, 문서 병합 및 분할 등을 수행할 수 있습니다. 대량의 PDF 작업을 처리할 때, Parallel.ForEach와 병렬 처리를 사용하면 실행 시간을 크게 줄일 수 있습니다. 수백 개의 PDF를 생성하거나 동시에 여러 파일에서 데이터를 추출할 때, IronPDF와 함께 데이터 병렬성을 활용하면 작업이 더 빠르고 효율적으로 완료됩니다.

이 가이드는 IronPDF와 Parallel.ForEach를 사용하여 PDF 처리 작업을 최적화하고자 하는 .NET 개발자를 위한 것입니다. C#에 대한 기본 지식과 IronPDF 라이브러리 친숙성이 권장됩니다. 이 가이드를 끝내면 병렬 처리를 구현하여 여러 PDF 작업을 동시에 처리하여 성능과 확장성을 향상시킬 수 있습니다.

시작하기

IronPDF 설치 중

IronPDF를 프로젝트에서 사용하려면 NuGet을 통해 라이브러리를 설치해야 합니다.

NuGet Install-Package

IronPDF를 설치하려면 다음 단계를 따르세요:

  1. Visual Studio에서 프로젝트를 엽니다.
  2. ToolsNuGet Package ManagerManage NuGet Packages for Solution으로 이동합니다.
  3. NuGet 패키지 관리자에서 IronPDF를 검색합니다.

C# 병렬 Foreach (개발자를 위한 작동 방법): 그림 1

  1. Install를 클릭하여 프로젝트에 IronPDF 라이브러리를 추가합니다.

C# 병렬 Foreach (개발자를 위한 작동 방법): 그림 2

또는 NuGet 패키지 관리자 콘솔을 통해 설치할 수 있습니다:

Install-Package IronPdf

IronPDF가 설치되면 PDF 생성 및 조작 작업에 사용할 준비가 된 것입니다.

C#에서 Parallel.ForEach의 기본 개념

Parallel.ForEach은(는) System.Threading.Tasks 네임스페이스의 일부이며 동시에 반복을 실행할 수 있는 간단하고 효과적인 방법을 제공합니다. Parallel.ForEach의 구문은 다음과 같습니다:

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

컬렉션의 각 항목은 병렬로 처리되며 시스템은 사용 가능한 스레드에 작업 부하를 배분하는 방법을 결정합니다. 또한 사용될 최대 스레드 수 등의 병렬성 정도를 제어하는 옵션을 지정할 수 있습니다.

비교하면, 전통적인 foreach 루프는 각 항목을 하나씩 처리하는 반면, 병렬 루프는 여러 항목을 동시에 처리하여 대형 컬렉션을 처리할 때 성능을 향상시킬 수 있습니다.

단계별 구현

프로젝트 설정

먼저 IronPDF가 시작하기 섹션에 설명된 대로 설치되었는지 확인하십시오. 그런 다음 병렬 PDF 처리 논리를 작성하기 시작할 수 있습니다.

병렬 처리 논리 작성

코드 스니펫: HTML을 PDF로 변환하기 위해 Parallel.ForEach 사용

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

이 코드는 여러 HTML 페이지를 병렬로 PDF로 변환하는 방법을 보여줍니다.

병렬 처리 오류 처리

병렬 작업을 처리할 때 오류 처리는 매우 중요합니다. Parallel.ForEach 루프 내에서 try-catch 블록을 사용하여 예외를 관리합니다.

코드 스니펫: 병렬 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

전체 코드 예제가 있는 실제 사용 사례

여러 PDF에서 동시에 텍스트 추출

병렬 처리의 또 다른 사용 사례는 여러 PDF에서 텍스트를 추출하는 것입니다. 여러 PDF 파일을 처리할 때 텍스트 추출을 동시에 수행하면 많은 시간을 절약할 수 있습니다. 다음 예제는 이를 수행하는 방법을 보여줍니다.

예제: 여러 문서에서 병렬로 텍스트 추출

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

출력 문서

C# 병렬 Foreach (개발자를 위한 작동 방법): 그림 3

이 코드에서는 각 PDF 파일을 병렬로 처리하여 텍스트를 추출하고, 추출된 텍스트를 별도의 텍스트 파일에 저장합니다.

예시: HTML 파일에서 병렬로 PDF 생성

이 예시에서는 여러 HTML 파일 목록에서 병렬로 여러 개의 PDF를 생성할 것입니다. 이는 여러 동적 HTML 페이지를 PDF 문서로 변환해야 하는 경우의 일반적인 시나리오일 수 있습니다.

코드

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

콘솔 출력

C# 병렬 Foreach (개발자를 위한 작동 방법): 그림 4

PDF 출력

C# 병렬 Foreach (개발자를 위한 작동 방법): 그림 5

설명

  1. HTML 파일: 배열 htmlFiles은(는) PDF로 변환하고자 하는 여러 HTML 파일의 경로를 포함하고 있습니다.

  2. 병렬 처리:

    • Parallel.ForEach(htmlFiles, htmlFile => {...})은(는) 각 HTML 파일을 동시에 처리하여 여러 파일을 다룰 때 작업 속도를 높입니다.
    • htmlFiles 배열의 각 파일에 대해 코드가 renderer.RenderHtmlFileAsPdf(htmlFile);을(를) 사용하여 PDF로 변환합니다.
  3. PDF 저장: PDF를 생성한 후 pdf.SaveAs 메소드를 사용하여 PDF를 저장하며, 출력 파일 이름에 원본 HTML 파일의 이름을 추가합니다.

  4. 오류 처리: 오류가 발생하면 (예: HTML 파일이 없거나 변환 중 문제가 발생하는 경우), try-catch 블록에서 오류가 잡히며 특정 파일에 대한 오류 메시지가 출력됩니다.

성능 팁 및 모범 사례

IronPDF로 스레드 안전 문제 방지하기

IronPDF는 대부분의 작업에서 스레드 안전성을 보장합니다. 그러나 병렬로 동일 파일에 쓰는 작업은 문제가 발생할 수 있습니다. 항상 각 병렬 작업이 별도의 출력 파일이나 리소스를 사용하도록 해야 합니다.

대규모 데이터셋의 병렬 처리 최적화

성능을 최적화하기 위해 병렬 처리 수준을 제어하는 것을 고려하십시오. 대규모 데이터셋의 경우 시스템 과부하를 방지하기 위해 동시 스레드 수를 제한할 수 있습니다.

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

병렬 PDF 작업 시 메모리 관리

많은 수의 PDF를 처리할 때는 메모리 사용에 주의를 기울여야 합니다. 필요 없게 된 즉시 PdfDocument 객체와 같은 리소스를 해제하려고 시도하십시오.

확장 메서드 사용하기

확장 메서드는 기존 타입의 소스 코드를 수정하지 않고 새로운 기능을 추가할 수 있는 특별한 형태의 정적 메서드입니다. 이는 IronPDF와 같은 라이브러리에서 사용자 정의 처리 메서드를 추가하거나 기능을 확장하여 PDF 작업을 보다 편리하게, 특히 병렬 처리 시나리오에서 사용할 수 있도록 할 때 유용합니다.

병렬 처리에서 확장 메서드 사용의 이점

확장 메서드를 사용하면 병렬 루프의 로직을 단순화하는 간결하고 재사용 가능한 코드를 만들 수 있습니다. 이 접근 방식은 중복을 줄일 뿐만 아니라 복잡한 PDF 워크플로우와 데이터 병렬 처리와 관련된 깔끔한 코드베이스를 유지하는데 도움을 줍니다.

결론

대량의 PDF 처리 시 IronPDF와 함께 Parallel.ForEach 같은 병렬 루프를 사용하면 상당한 성능 향상을 제공합니다. HTML을 PDF로 변환하거나, 텍스트를 추출하거나, 문서를 조작하거나 간에, 데이터 병렬 처리는 작업을 동시에 실행하여 빠르게 처리할 수 있게 합니다. 병렬 접근 방식은 작업을 여러 코어 프로세서에서 실행할 수 있게 하여 전체 실행 시간을 줄이고 대량 처리 작업의 성능을 향상시킵니다.

병렬 처리가 작업을 가속화하지만, 스레드 안전성과 자원 관리를 주의해야 합니다. IronPDF는 대부분의 작업에서 스레드 안전성을 보장하지만, 공유 리소스를 액세스할 때 잠재적인 충돌을 처리하는 것이 중요합니다. 안정성을 보장하기 위해 오류 처리 및 메모리 관리를 고려하십시오. 특히 애플리케이션이 확장할 때입니다.

IronPDF에 더 깊이 들어가고 고급 기능을 탐색할 준비가 되었다면, 공식 문서는 광범위한 정보를 제공합니다. 또한, 자신의 프로젝트에서 라이브러리를 구매하기 전에 테스트할 수 있도록 체험판 라이선스를 활용할 수 있습니다.

자주 묻는 질문

C#에서 여러 HTML 파일을 동시에 PDF로 변환하려면 어떻게 해야 하나요?

IronPDF와 Parallel.ForEach 메서드를 사용하여 여러 HTML 파일을 동시에 PDF로 변환할 수 있습니다. 이 접근 방식은 동시 처리를 활용하여 전체 실행 시간을 줄임으로써 성능을 향상시킵니다.

C#에서 PDF 처리를 위한 Parallel.ForEach를 사용했을 때의 이점은 무엇인가요?

IronPDF와 함께 Parallel.ForEach를 사용하면 PDF 작업의 동시 실행이 가능하여 성능이 크게 향상됩니다. 특히 대량 파일을 처리할 때 유용합니다. 이 방법은 여러 코어를 활용하여 HTML에서 PDF로의 변환 및 텍스트 추출을 보다 효율적으로 처리합니다.

.NET PDF 라이브러리를 병렬 처리 작업을 위해 어떻게 설치합니까?

IronPDF를 .NET 프로젝트에 설치하려면, Visual Studio를 열고 도구 → NuGet 패키지 관리자 → 솔루션용 NuGet 패키지 관리로 이동하세요. IronPDF를 검색하고 설치를 클릭하세요. 또는, NuGet 패키지 관리자 콘솔에서 다음 명령을 사용하세요: Install-Package IronPdf.

병렬 PDF 처리에서 오류 처리를 위한 모범 사례는 무엇입니까?

IronPDF를 사용한 병렬 PDF 처리에서 Parallel.ForEach 루프 내에서 try-catch 블록을 사용하여 예외를 처리하세요. 이는 견고한 오류 관리를 보장하고 개별 작업 실패가 전체 프로세스에 영향을 미치는 것을 방지합니다.

IronPDF는 여러 PDF에서 동시에 텍스트 추출을 처리할 수 있습니까?

네, IronPDF는 Parallel.ForEach 메소드를 활용하여 여러 PDF에서 동시에 텍스트를 추출할 수 있으며, 대량 데이터 세트를 효율적으로 처리하기 위한 동시 처리를 가능하게 합니다.

IronPDF는 병렬 PDF 작업에 대해 스레드 안전성(thread safety)이 있습니까?

IronPDF는 대부분의 작업에서 스레드 안전성을 제공하도록 설계되었습니다. 그러나 각 병렬 작업이 다른 파일과 같은 개별 리소스를 사용하도록 하여 충돌을 방지하고 데이터 무결성을 보장하는 것이 중요합니다.

C#에서 병렬 PDF 작업 중 메모리 관리를 개선하는 방법은 무엇입니까?

메모리 관리를 최적화하려면 대량의 PDF를 처리할 때 특히 사용 후 PdfDocument 객체와 같은 리소스를 신속하게 해제하세요. 이는 최적의 메모리 사용 및 시스템 성능을 유지하는 데 도움이 됩니다.

확장 메소드는 C#을 사용한 병렬 PDF 처리에서 어떤 역할을 합니까?

확장 메소드는 기존 유형의 소스 코드를 수정하지 않고 기능을 추가할 수 있게 합니다. IronPDF를 사용한 병렬 PDF 처리에서는 재사용 가능하고 간결한 코드를 생성하여 병렬 루프 내 작업을 간소화하는 데 유용합니다.

C#에서 PDF 작업의 병렬성 정도를 어떻게 제어할 수 있습니까?

C#에서는 ExecutionDataflowBlockOptions과 같은 옵션을 사용하여 PDF 작업의 병렬성 정도를 제어하고 동시 스레드 수를 제한할 수 있습니다. 이는 시스템 리소스를 효과적으로 관리하고 과부하를 방지하는 데 도움이 됩니다.

제이콥 멜러, 팀 아이언 최고기술책임자
최고기술책임자

제이콥 멜러는 Iron Software의 최고 기술 책임자(CTO)이자 C# PDF 기술을 개척한 선구적인 엔지니어입니다. Iron Software의 핵심 코드베이스를 최초로 개발한 그는 창립 초기부터 회사의 제품 아키텍처를 설계해 왔으며, CEO인 캐머런 리밍턴과 함께 회사를 NASA, 테슬라, 그리고 전 세계 정부 기관에 서비스를 제공하는 50명 이상의 직원을 보유한 기업으로 성장시켰습니다.

제이콥은 맨체스터 대학교에서 토목공학 학사 학위(BEng)를 최우등으로 취득했습니다(1998~2001). 1999년 런던에서 첫 소프트웨어 회사를 설립하고 2005년 첫 .NET 컴포넌트를 개발한 후, 마이크로소프트 생태계 전반에 걸쳐 복잡한 문제를 해결하는 데 전문성을 발휘해 왔습니다.

그의 대표 제품인 IronPDF 및 Iron Suite .NET 라이브러리는 전 세계적으로 3천만 건 이상의 NuGet 설치 수를 기록했으며, 그의 핵심 코드는 전 세계 개발자들이 사용하는 다양한 도구에 지속적으로 활용되고 있습니다. 25년의 실무 경험과 41년의 코딩 전문성을 바탕으로, 제이콥은 차세대 기술 리더들을 양성하는 동시에 기업 수준의 C#, Java, Python PDF 기술 혁신을 주도하는 데 주력하고 있습니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해