Condividi tramite


Procedura: creare ed eseguire una query PLINQ semplice

Nell'esempio seguente viene mostrato come creare una query Parallel LINQ semplice tramite il metodo di estensione AsParallel nella sequenza di origine e quindi come eseguirla con il metodo ForAll<TSource>.

NotaNota

Questa documentazione utilizza espressioni lambda per definire delegati in PLINQ.Se non si ha familiarità con le espressioni lambda in C# o Visual Basic, vedere Espressioni lambda in PLINQ e TPL.

Esempio

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 questo esempio viene mostrato il modello di base per creare ed eseguire qualsiasi query Parallel LINQ quando l'ordine della sequenza dei risultati non è importante. Le query non ordinate sono in genere più veloci rispetto a quelle ordinate. La query esegue il partizionamento dell'origine in attività eseguite in modo asincrono in più thread. L'ordine di completamento di ogni attività dipende non solo dalla quantità di lavoro necessaria per elaborare gli elementi della partizione, ma anche da fattori esterni, ad esempio il modo in cui il sistema operativo pianifica ogni thread. Lo scopo di questo esempio è dimostrare l'utilizzo e potrebbe non essere eseguito più velocemente dell'equivalente query LINQ to Objects sequenziale. Per ulteriori informazioni sull'aumento di velocità, vedere Informazioni sull'aumento di velocità in PLINQ. Per ulteriori informazioni su come conservare l'ordine degli elementi di una query, vedere Procedura: controllare l'ordine in una query PLINQ.

Compilazione del codice

  • Creare un progetto di applicazione console

  • Incollare l'esempio di codice dopo il metodo Main.

  • Aggiungere una chiamata a SimpleQuery da Main e premere F5.

Vedere anche

Concetti

Parallel LINQ (PLINQ)

Cronologia delle modifiche

Data

Cronologia

Motivo

Maggio 2010

Aggiunta nota sull'utilizzo rispetto all'aumento di velocità.

Commenti e suggerimenti dei clienti.