방법: 간단한 PLINQ 쿼리 만들기 및 실행
업데이트: 2010년 5월
다음 예제에서는 소스 시퀀스에서 AsParallel 확장 메서드를 사용하여 간단한 병렬 LINQ 쿼리를 만들고, ForAll<TSource> 메서드를 사용하여 이 쿼리를 실행하는 방법을 보여 줍니다.
참고 |
---|
이 문서에서는 람다 식을 사용하여 PLINQ에 대리자를 정의합니다.C# 또는 Visual Basic의 람다 식에 익숙하지 않으면 PLINQ 및 TPL의 람다 식을 참조하십시오. |
예제
Sub SimpleQuery()
Dim source = Enumerable.Range(100, 20000)
' Result sequence might be out of order.
Dim parallelQuery = From num In source.AsParallel()
Where num Mod 10 = 0
Select num
' Process result sequence in parallel
parallelQuery.ForAll(Sub(e)
DoSomething(e)
End Sub)
' Or use For Each to merge results first
' as in this example, Where results must
' be serialized sequentially through static Console method.
For Each n In parallelQuery
Console.Write("{0} ", n)
Next
' You can also use ToArray, ToList, etc
' as with LINQ to Objects.
Dim parallelQuery2 = (From num In source.AsParallel()
Where num Mod 10 = 0
Select num).ToArray()
'Method syntax is also supported
Dim parallelQuery3 = source.AsParallel().Where(Function(n)
Return (n Mod 10) = 0
End Function).Select(Function(n)
Return n
End Function)
For Each i As Integer In parallelQuery3
Console.Write("{0} ", i)
Next
Console.ReadLine()
End Sub
' A toy function to demonstrate syntax. Typically you need a more
' computationally expensive method to see speedup over sequential queries.
Sub DoSomething(ByVal i As Integer)
Console.Write("{0:###.## }", Math.Sqrt(i))
End Sub
var source = Enumerable.Range(100, 20000);
// Result sequence might be out of order.
var parallelQuery = from num in source.AsParallel()
where num % 10 == 0
select num;
// Process result sequence in parallel
parallelQuery.ForAll((e) => DoSomething(e));
// Or use foreach to merge results first.
foreach (var n in parallelQuery)
{
Console.WriteLine(n);
}
// You can also use ToArray, ToList, etc
// as with LINQ to Objects.
var parallelQuery2 = (from num in source.AsParallel()
where num % 10 == 0
select num).ToArray();
// Method syntax is also supported
var parallelQuery3 = source.AsParallel().Where(n => n % 10 == 0).Select(n => n);
이 예제에서는 결과 시퀀스의 순서가 중요하지 않은 경우 병렬 LINQ 쿼리를 만들고 실행하기 위한 기본 패턴을 보여 줍니다. 순서가 지정되지 않은 쿼리는 일반적으로 순서가 지정된 쿼리보다 속도가 더 빠릅니다. 이 쿼리는 소스를 여러 스레드에서 비동기적으로 실행되는 여러 작업으로 분할합니다. 각 작업이 완료되는 순서는 파티션의 요소를 처리하는 데 필요한 작업의 양뿐 아니라 운영 체제에서 각 스레드가 예약되는 방식과 같은 외부 요인에 따라서도 달라집니다. 이 예제는 사용법을 보여 주기 위한 것이며, 이에 상응하는 순차 LINQ to Objects 쿼리보다 실행 속도가 느릴 수 있습니다. 속도 향상에 대한 자세한 내용은 PLINQ의 속도 향상 이해를 참조하십시오. 쿼리에서 요소 순서를 유지하는 방법에 대한 자세한 내용은 방법: PLINQ 쿼리의 순서 제어를 참조하십시오.
코드 컴파일
콘솔 응용 프로그램 프로젝트를 만듭니다.
코드 예제를 Main 메서드 뒤에 붙여넣습니다.
Main에서 SimpleQuery에 대한 호출을 추가하고 F5 키를 누릅니다.
참고 항목
개념
변경 기록
날짜 |
변경 내용 |
이유 |
---|---|---|
2010년 5월 |
사용법과 속도 향상에 대한 설명을 추가했습니다. |
고객 의견 |