方法: 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 に含まれています。 詳細については、「同時実行ビジュアライザー」を参照してください。