Megosztás a következőn keresztül:


Útmutató: A PLINQ-lekérdezés teljesítményének mérése

Ez a példa bemutatja, hogyan használható a Stopwatch osztály egy PLINQ-lekérdezés végrehajtásához szükséges idő mérésére.

Példa

Ez a példa egy üres foreach ciklust (For Each a Visual Basicben) használ a lekérdezés végrehajtásához szükséges idő méréséhez. A valós kódban a hurok általában további feldolgozási lépéseket tartalmaz, amelyek növelik a lekérdezések teljes végrehajtási idejét. Vegye észre, hogy a stopper csak közvetlenül a ciklus előtt indul el, mert ekkor kezdődik a lekérdezés végrehajtása. Ha részletesebb mérésre van szüksége, a ElapsedMillisecondshelyett használhatja a ElapsedTicks tulajdonságot.

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

A teljes végrehajtási idő hasznos mérőszám, amikor lekérdezési implementációkkal kísérletezik, de nem mindig mondja el a teljes történetet. Ha mélyebb és részletesebb képet szeretne kapni a lekérdezési szálak és más futó folyamatok közötti interakcióról, használja a Egyidejűségi vizualizációs.

Lásd még