방법: PLINQ 쿼리 성능 측정
이 예제에서는 Stopwatch 클래스를 사용하여 PLINQ 쿼리를 실행하는 데 소요되는 시간을 측정하는 방법을 보여 줍니다.
예제
이 예제에서는 빈 foreach 루프(Visual Basic의 경우 For Each)를 사용하여 쿼리를 실행하는 데 소요되는 시간을 측정합니다. 실제 코드에서는 일반적으로 루프에 추가 처리 단계가 포함되므로 총 쿼리 실행 시간이 늘어납니다. 루프 바로 전, 즉 쿼리 실행이 시작되기 전까지는 스톱워치가 시작되지 않습니다. 보다 세밀한 측정이 필요한 경우에는 ElapsedMilliseconds 대신 ElapsedTicks 속성을 사용할 수 있습니다.
Sub Main()
Dim source = Enumerable.Range(0, 3000000)
Dim queryToMeasure = From num In source
Where num Mod 3 = 0
Select Math.Sqrt(num)
Console.WriteLine("Measuring...")
' The query does not run until it is enumerated.
' Therefore, start the timer here.
Dim sw = System.Diagnostics.Stopwatch.StartNew()
' For pure query cost, enumerate and do nothing else.
For Each n As Double In queryToMeasure
Next
Dim elapsed As Long
elapsed = sw.ElapsedMilliseconds ' or sw.ElapsedTicks
Console.WriteLine("Total query time: {0} ms.", elapsed)
' Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.")
Console.ReadKey()
End Sub
static void Main()
{
var source = Enumerable.Range(0, 3000000);
var queryToMeasure = from num in source
where num % 3 == 0
select Math.Sqrt(num);
Console.WriteLine("Measuring...");
// The query does not run until it is enumerated.
// Therefore, start the timer here.
System.Diagnostics.Stopwatch sw = System.Diagnostics.Stopwatch.StartNew();
// For pure query cost, enumerate and do nothing else.
foreach (var n in queryToMeasure) { }
long elapsed = sw.ElapsedMilliseconds; // or sw.ElapsedTicks
Console.WriteLine("Total query time: {0} ms", elapsed);
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
총 실행 시간은 쿼리 구현을 시험하는 데 유용한 메트릭이지만 이것만으로는 전반적인 성능을 알 수 없는 경우도 있습니다. 쿼리 스레드 간의 상호 작용 및 쿼리 스레드와 실행 중인 다른 프로세스의 상호 작용을 깊이 있고 자세하게 보려면 동시성 시각화 도우미를 사용합니다. 이 도구는 Microsoft Visual Studio 2010 Premium에서 제공합니다. 자세한 내용은 동시성 시각화 도우미를 참조하십시오.