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

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

Nota

Este exemplo destina-se a demonstrar o uso e pode não ser executado mais rápido do que a consulta LINQ to Objects sequencial equivalente. Para obter mais informações sobre speedup, consulte Understanding Speedup in 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

PLINQ é projetado para explorar oportunidades de paralelização. No entanto, nem todas as consultas se beneficiam da execução paralela. Por exemplo, quando uma consulta contém um único representante de usuário que faz pouco trabalho, a consulta geralmente será executada mais rapidamente sequencialmente. A execução sequencial é mais rápida porque a sobrecarga envolvida em permitir a execução em paralelização é mais cara do que a aceleração obtida. 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 parte ou toda a consulta sequencialmente. No entanto, em alguns casos, você pode saber mais sobre sua consulta do que o PLINQ é capaz de determinar a partir de sua análise. Por exemplo, você pode saber que um delegado é caro e que a consulta definitivamente se beneficiará da paralelização. Nesses casos, você pode usar o WithExecutionMode método e especificar o ForceParallelism valor para instruir PLINQ a sempre executar a consulta como paralelo.

Compilando o código

Recorte e cole este código no PLINQ Data Sample e chame o método de Main.

Consulte também