Como: Especificar o modo de execução em PLINQ

Este exemplo mostra como forçar o PLINQ a ignorar a heurística padrão e paralelizar uma consulta, independentemente da forma da consulta.

Observação

Este exemplo tem como objetivo demonstrar o uso e pode não executar tão rápido quanto a consulta LINQ to Objects sequencial equivalente. Para saber mais sobre agilização, confira Noções básicas sobre agilização no PLINQ.

Exemplo

// Paste into PLINQDataSample class.
static void ForceParallel()
{
    var customers = GetCustomers();
    var parallelQuery = (from cust in customers.AsParallel()
                            .WithExecutionMode(ParallelExecutionMode.ForceParallelism)
                         where cust.City == "Berlin"
                         select cust.CustomerName)
                        .ToList();
}
Private Shared Sub ForceParallel()
    Dim customers = GetCustomers()
    Dim parallelQuery = (From cust In customers.AsParallel().WithExecutionMode(ParallelExecutionMode.ForceParallelism)
                         Where cust.City = "Berlin"
                         Select cust.CustomerName).ToList()
End Sub

O PLINQ foi projetado para explorar oportunidades de paralelização. No entanto, nem todas as consultas se beneficiam da execução paralela. Por exemplo, quando uma consulta contiver um representante de usuário único que realize pouco trabalho, a consulta será normalmente executada mais rapidamente em sequência. A execução sequencial é mais rápida porque a sobrecarga envolvida na habilitação de paralelização de execução é mais cara do que o aumento de velocidade que é obtido. Portanto, o PLINQ não paraleliza automaticamente todas as consultas. Primeiro, examina a forma da consulta e os vários operadores que a compõem. Com base nessa análise, o PLINQ no modo de execução padrão pode decidir executar algumas das consultas em sequência ou todas elas. No entanto, em alguns casos, você pode saber mais sobre a consulta do que o PLINQ é capaz de determinar com base na análise. Por exemplo, você pode saber que um representante é caro e que a consulta se beneficiará definitivamente da paralelização. Nesses casos, você pode usar o método WithExecutionMode e especificar o valor ForceParallelism para instruir o PLINQ a sempre executar a consulta em paralelo.

Compilando o código

Recorte e cole este código para o Exemplo de Dados do PLINQ e chame o método Main.

Confira também