Como especificar o modo de execução em PLINQHow to: Specify the Execution Mode in 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.This example shows how to force PLINQ to bypass its default heuristics and parallelize a query regardless of the query's shape.

Aviso

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.This example is intended to demonstrate usage, and might not run faster than the equivalent sequential LINQ to Objects query. Para saber mais sobre agilização, confira Noções básicas sobre agilização no PLINQ.For more information about speedup, see Understanding Speedup in PLINQ.

ExemploExample

// 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.PLINQ is designed to exploit opportunities for parallelization. No entanto, nem todas as consultas se beneficiam da execução paralela.However, not all queries benefit from parallel execution. Por exemplo, quando uma consulta contiver um representante de usuário único que realize muito pouco trabalho, a consulta será normalmente executada mais rapidamente em sequência.For example, when a query contains a single user delegate that does very little work, the query will usually run faster sequentially. Isso ocorre porque a sobrecarga envolvida na habilitação de paralelização de execução é mais cara do que o aumento de velocidade que é obtido.This is because the overhead involved in enabling parallelizing execution is more expensive than the speedup that is obtained. Portanto, o PLINQ não paraleliza automaticamente todas as consultas.Therefore, PLINQ does not automatically parallelize every query. Primeiro, examina a forma da consulta e os vários operadores que a compõem.It first examines the shape of the query and the various operators that comprise it. 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.Based on this analysis, PLINQ in the default execution mode may decide to execute some or all of the query sequentially. No entanto, em alguns casos, você pode saber mais sobre a consulta do que o PLINQ é capaz de determinar com base na análise.However, in some cases you may know more about your query than PLINQ is able to determine from its analysis. Por exemplo, você pode saber que um representante é muito caro e que a consulta se beneficiará definitivamente da paralelização.For example, you may know that a delegate is very expensive, and that the query will definitely benefit from parallelization. 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.In such cases, you can use the WithExecutionMode method and specify the ForceParallelism value to instruct PLINQ to always run the query as parallel.

Compilando o códigoCompiling the Code

Recorte e cole este código para o Exemplo de Dados do PLINQ e chame o método Main.Cut and paste this code into the PLINQ Data Sample and call the method from Main.

Consulte tambémSee also