Aracılığıyla paylaş


Nasıl yapılır: PLINQ Sorgu Performansını Ölçme

Bu örnekte, PLINQ sorgusunun yürütülmesi için gereken süreyi ölçmek için Stopwatch sınıfının nasıl kullanılacağı gösterilmektedir.

Örnek

Bu örnekte, sorgunun yürütülmesi için gereken süreyi ölçmek için boş bir foreach döngüsü (Visual Basic'teFor Each) kullanılır. Gerçek dünya kodunda, döngü genellikle toplam sorgu yürütme süresine eklenen ek işleme adımlarını içerir. Dikkat edin, kronometre yalnızca döngünün hemen öncesinde başlatılır, çünkü sorgu yürütme o zaman başlar. Daha ayrıntılı ölçüme ihtiyacınız varsa, ElapsedMillisecondsyerine ElapsedTicks özelliğini kullanabilirsiniz.

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

Toplam yürütme süresi, sorgu uygulamalarıyla deneme yaparken yararlı bir ölçümdür, ancak her zaman tüm hikayeyi anlatmaz. Sorgu iş parçacıklarının birbiriyle ve diğer çalışan işlemlerle etkileşiminin daha derin ve daha zengin bir görünümünü elde etmek için Eşzamanlılık Görselleştiricisikullanın.

Ayrıca bkz.