다음을 통해 공유


방법: PLINQ에 실행 모드 지정

업데이트: 2010년 5월

이 예제에서는 PLINQ에서 기본 휴리스틱을 무시하고 쿼리의 형태에 관계없이 쿼리를 병렬화하도록 지정하는 방법을 보여 줍니다.

주의 정보주의

이 예제는 사용법을 보여 주기 위한 것이며, 이에 상응하는 순차 LINQ to Objects 쿼리보다 실행 속도가 느릴 수 있습니다.속도 향상에 대한 자세한 내용은 PLINQ의 속도 향상 이해를 참조하십시오.

예제

Private Shared Sub ForceParallel()
    Dim customers = GetCustomers()
    Dim parallelQuery = (From cust In customers.AsParallel().WithExecutionMode(ParallelExecutionMode.ForceParallelism) _
        Where cust.City = "Berlin" _
        Select cust.CustomerName).ToList()
End Sub
// Paste into PLINQDataSample class.
static void ForceParallel()
{
    var customers = GetCustomers();
    var parallelQuery = (from cust in customers.AsParallel()
                            .WithExecutionMode(ParallelExecutionMode.ForceParallelism)
                         where cust.City == "Berlin"
                         select cust.CustomerName)
                        .ToList();
}

PLINQ는 가능할 때마다 병렬화를 활용할 수 있도록 만들어졌습니다. 그러나 일부 쿼리는 병렬로 실행해도 이점이 없습니다. 예를 들어 매우 적은 양의 작업만 수행하는 단일 사용자 대리자가 포함된 쿼리는 대개 순차적으로 실행하는 것이 더 빠릅니다. 개선되는 속도에 비해 실행을 병렬화하는 데 필요한 오버헤드가 너무 크기 때문입니다. 따라서 PLINQ에서는 모든 쿼리를 자동으로 병렬화하는 것이 아니라, 먼저 쿼리의 형태와 쿼리를 구성하는 다양한 연산자를 확인합니다. 기본 실행 모드의 PLINQ에서는 이 분석 결과에 따라 쿼리의 일부 또는 모든 부분을 순차적으로 실행하도록 결정할 수 있습니다. 그러나 일부 경우에는 쿼리와 관련하여 PLINQ에서 분석을 통해 확인할 수 있는 것보다 사용자가 알고 있는 정보가 더 많을 수도 있습니다. 예를 들어 대리자의 부담이 크며 쿼리를 병렬화함으로써 얻을 수 있는 이점은 한정적일 것으로 판단되는 경우가 있습니다. 이 경우 WithExecutionMode<TSource> 메서드를 사용하고 ForceParallelism 값을 지정하여 PLINQ에서 항상 쿼리를 병렬로 실행하도록 지정할 수 있습니다.

코드 컴파일

이 코드를 복사하여 PLINQ 데이터 샘플에 붙여넣고 Main에서 해당 메서드를 호출합니다.

참고 항목

참조

AsSequential<TSource>

개념

PLINQ(병렬 LINQ)

변경 기록

날짜

변경 내용

이유

2010년 5월

사용법과 속도 향상에 대한 설명을 추가했습니다.

고객 의견