Bagikan melalui


Cara: Mengukur Performa Kueri PLINQ

Contoh ini menunjukkan cara menggunakan kelas Stopwatch untuk mengukur waktu yang diperlukan kueri PLINQ untuk dijalankan.

Contoh

Contoh ini menggunakan perulangan foreach kosong (For Each di Visual Basic) untuk mengukur waktu yang diperlukan kueri untuk dijalankan. Dalam kode dunia nyata, perulangan biasanya berisi langkah-langkah pemrosesan tambahan yang ditambahkan ke total waktu eksekusi kueri. Perhatikan bahwa stopwatch baru dimulai tepat sebelum iterasi perulangan, karena saat itulah eksekusi kueri mulai berjalan. Jika Anda memerlukan pengukuran yang lebih halus, Anda dapat menggunakan properti ElapsedTicks alih-alih ElapsedMilliseconds.

using System;
using System.Diagnostics;
using System.Linq;

class ExampleMeasure
{
    static void Main()
    {
        var source = Enumerable.Range(0, 3000000);

        var queryToMeasure =
             from num in source.AsParallel()
             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.
        var sw = Stopwatch.StartNew();

        // For pure query cost, enumerate and do nothing else.
        foreach (var n in queryToMeasure) { }

        sw.Stop();
        long elapsed = sw.ElapsedMilliseconds; // or sw.ElapsedTicks
        Console.WriteLine($"Total query time: {elapsed} ms");

        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
Module ExampleMeasure
    Sub Main()
        Dim source = Enumerable.Range(0, 3000000)
        ' Define parallel and non-parallel queries.
        Dim queryToMeasure = From num In source.AsParallel()
                             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 = Stopwatch.StartNew()

        ' For pure query cost, enumerate and do nothing else.
        For Each n As Double In queryToMeasure
        Next

        sw.Stop()
        Dim elapsed As Long = sw.ElapsedMilliseconds  ' or sw.ElapsedTicks
        Console.WriteLine($"Total query time: {elapsed} ms.")

        Console.WriteLine("Press any key to exit.")
        Console.ReadKey()
    End Sub
End Module

Total waktu eksekusi adalah metrik yang berguna saat Anda bereksperimen dengan implementasi kueri, tetapi tidak selalu menceritakan seluruh cerita. Untuk mendapatkan tampilan yang lebih dalam dan lebih kaya dari interaksi antar-utas kueri dan dengan proses lain yang sedang berjalan, gunakan Visualizer Konkurensi.

Lihat juga