HOW TO:測量 PLINQ 查詢效能
此範例說明如何使用 Stopwatch 類別來測量 PLINQ 查詢執行所需的時間。
範例
此範例會使用空的 foreach 迴圈 (在 Visual Basic 中為 For Each) 測量查詢執行所需的時間。 在實際的程式碼中,迴圈通常包含會增長查詢總執行時間的其他處理步驟。 請注意,stopwatch 要到迴圈即將開始前才會啟動,因為那是查詢開始執行的時間。 如果您需要更精密的測量,您可以使用 ElapsedTicks 屬性來取代 ElapsedMilliseconds。
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 中找到此工具。 如需詳細資訊,請參閱並行視覺化檢視。