Compartilhar via


Como: Criar e executar uma consulta simples PLINQ

O exemplo a seguir mostra como criar uma consulta LINQ paralelo simples usando o AsParallel o método de extensão sobre a seqüência de origem e executar a consulta usando o ForAll<TSource> método.

Observação

Esta documentação usa expressões lambda para definir os delegados no PLINQ.Se você não estiver familiarizado com as expressões lambda em C# ou Visual Basic, consulte Expressões lambda no PLINQ e TPL.

Exemplo

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

Este exemplo demonstra o padrão básico para criar e executar qualquer consulta LINQ paralelo quando a ordem da seqüência de resultado não é importante; as consultas não ordenadas são geralmente mais rápidas do que as consultas ordenadas. A consulta partições a fonte em tarefas que são executadas de forma assíncrona em vários segmentos. A ordem na qual cada tarefa é concluída depende não apenas a quantidade de trabalho envolvido processar os elementos na partição, mas também fatores externos como, por exemplo, como o sistema operacional agenda cada thread. Este exemplo destina-se para demonstrar o uso e pode não ser executado mais rápido do que o equivalente LINQ to Objects seqüencial de consulta de. Para obter mais informações sobre o aumento de velocidade, consulte Aumento de velocidade de compreensão no PLINQ. Para obter mais informações sobre como preservar a ordenação dos elementos em uma consulta, consulte Como: Controle de pedidos em uma consulta PLINQ.

Compilando o código

  • Criar um projeto de aplicativo de console

  • Cole o exemplo de código após o método Main.

  • Adicionar uma chamada para SimpleQuery de principal e pressione F5.

Consulte também

Conceitos

Parallel LINQ PLINQ)

Histórico de alterações

Date

History

Motivo

Maio de 2010

Observação adicionada referentes ao uso vs. aumento de velocidade.

Comentários do cliente.