Sdílet prostřednictvím


Postupy: Vytvoření a spuštění dotazu jednoduché PLINQ

Následující příklad ukazuje, jak vytvořit jednoduchý paralelní LINQ dotaz pomocí AsParallel metodu na pořadí zdroje a provedení dotazu pomocí rozšíření ForAll<TSource> metody.

PoznámkaPoznámka

Tato dokumentace používá lambda výrazy k definování delegátů v PLINQ.Pokud nejste obeznámeni s lambda výrazy v jazyce C# nebo Visual Basic, pokračujte na Lambda výrazy v PLINQ a TPL.

Příklad

Sub SimpleQuery()

    Dim source = Enumerable.Range(100, 20000)

    ' Result sequence might be out of order.
    Dim parallelQuery = From num In source.AsParallel()
                            Where num Mod 10 = 0
                            Select num

    ' Process result sequence in parallel
    parallelQuery.ForAll(Sub(e)
                             DoSomething(e)
                         End Sub)

    ' Or use For Each to merge results first
    ' as in this example, Where results must
    ' be serialized sequentially through static Console method.
    For Each n In parallelQuery
        Console.Write("{0} ", n)
    Next

    ' You can also use ToArray, ToList, etc
    ' as with LINQ to Objects.
    Dim parallelQuery2 = (From num In source.AsParallel()
                              Where num Mod 10 = 0
                              Select num).ToArray()

    'Method syntax is also supported
    Dim parallelQuery3 = source.AsParallel().Where(Function(n)
                                                       Return (n Mod 10) = 0
                                                   End Function).Select(Function(n)
                                                                            Return n

                                                                        End Function)

    For Each i As Integer In parallelQuery3
        Console.Write("{0} ", i)
    Next
    Console.ReadLine()

End Sub

' A toy function to demonstrate syntax. Typically you need a more
' computationally expensive method to see speedup over sequential queries.
Sub DoSomething(ByVal i As Integer)
    Console.Write("{0:###.## }", Math.Sqrt(i))
End Sub
            var source = Enumerable.Range(100, 20000);

            // Result sequence might be out of order.
            var parallelQuery = from num in source.AsParallel()
                                where num % 10 == 0
                                select num;

            // Process result sequence in parallel
            parallelQuery.ForAll((e) => DoSomething(e));

            // Or use foreach to merge results first.
            foreach (var n in parallelQuery)
            {
                Console.WriteLine(n);
            }

            // You can also use ToArray, ToList, etc
            // as with LINQ to Objects.
            var parallelQuery2 = (from num in source.AsParallel()
                                  where num % 10 == 0
                                  select num).ToArray();

            // Method syntax is also supported
            var parallelQuery3 = source.AsParallel().Where(n => n % 10 == 0).Select(n => n);

Tento příklad ukazuje základní vzor pro vytváření a spouštění paralelní LINQ dotazy při řazení výsledků sekvence není důležité. neuspořádané dotazy jsou obvykle rychlejší než objednané dotazy. Dotaz oddíly zdroje na úkoly, které jsou spouštěny asynchronně na více podprocesů. Pořadí, ve kterém každý úkol dokončí závisí nejen na množství práce na zpracování prvků v oddílu, ale také na externí faktory, jako například způsob, jakým operační systém naplánuje každý podproces. Tento příklad je určen k prokázání využití a může běžet rychleji než ekvivalentní sekvenční LINQ dotazu objektů. Další informace o Vančurovou Principy Vančurovou v PLINQ. Další informace o zachování pořadí prvků v dotazu Postupy: Jak ovládat řazení v PLINQ dotazu.

Probíhá kompilace kódu

  • Vytvoření projektu aplikace konzoly

  • Příklad kódu vložte po hlavní metody.

  • Přidejte volání z hlavní SimpleQuery a stiskněte klávesu F5.

Viz také

Koncepty

Paralelní LINQ (PLINQ)

Historie změn

Datum

Poslední dokumenty

Důvod

Květen 2010

Byla přidána poznámka týkající se používání vs. Vančurovou.

Názory zákazníků