Gewusst wie: Erstellen und Ausführen einer einfachen PLINQ-Abfrage

Im folgenden Beispiel wird gezeigt, wie Sie mithilfe der AsParallel-Erweiterungsmethode in der Quellsequenz eine einfache Parallel LINQ-Abfrage erstellen und die Abfrage mit der ForAll<TSource>-Methode ausführen.

HinweisHinweis

In dieser Dokumentation werden Delegaten in PLINQ mithilfe von Lambda-Ausdrücken definiert.Falls Sie nicht mit der Verwendung von Lambda-Ausdrücken in C# oder Visual Basic vertraut sind, finden Sie entsprechende Informationen unter Lambda-Ausdrücke in PLINQ und TPL.

Beispiel

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);

In diesem Beispiel wird das grundlegende Muster zum Erstellen und Ausführen einer beliebigen Parallel LINQ-Abfrage dargestellt, wenn die Reihenfolge der Ergebnissequenz irrelevant ist. Ungeordnete Abfragen werden im Allgemeinen schneller ausgeführt als geordnete Abfragen. Die Abfrage unterteilt die Quelle in Aufgaben, die asynchron in mehreren Threads ausgeführt werden. Die Reihenfolge, in der die einzelnen Aufgaben abgeschlossen werden, hängt nicht nur vom Arbeitsaufwand für die Verarbeitung der in jedem Teil enthaltenen Elemente ab, sondern auch von externen Faktoren, z. B. die Planung jedes Threads im Betriebssystem. Dieses Beispiel soll die Verwendung veranschaulichen, und es wird möglicherweise nicht schneller als die entsprechende sequenzielle LINQ to Objects-Abfrage ausgeführt. Weitere Informationen über Geschwindigkeitssteigerungen finden Sie unter Grundlagen zur Beschleunigung in PLINQ. Weitere Informationen zum Beibehalten der Reihenfolge von Elemente in einer Abfrage finden Sie unter Gewusst wie: Steuern der Sortierung in einer PLINQ-Abfrage.

Kompilieren des Codes

  • Erstellen eines Konsolenanwendungsprojekts

  • Fügen Sie das Codebeispiel nach der Main-Methode ein.

  • Fügen Sie einen Aufruf von SimpleQuery in Main hinzu, und drücken Sie F5.

Siehe auch

Konzepte

Paralleles LINQ (PLINQ)

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

Mai 2010

Hinweis bezüglich Verwendung und Geschwindigkeitssteigerung hinzugefügt.

Kundenfeedback.