Procedura: specificare la modalità di esecuzione in PLINQHow to: Specify the Execution Mode in PLINQ

Questo esempio mostra come forzare PLINQ a ignorare l'euristica predefinita e parallelizzare una query indipendentemente dalla relativa forma.This example shows how to force PLINQ to bypass its default heuristics and parallelize a query regardless of the query's shape.

Avviso

Lo scopo di questo esempio consiste nell'illustrare l'uso ed è possibile che l'esecuzione non sia più veloce rispetto alla query LINQ to Objects sequenziale equivalente.This example is intended to demonstrate usage, and might not run faster than the equivalent sequential LINQ to Objects query. Per altre informazioni sull'aumento di velocità, vedere Informazioni sull'aumento di velocità in PLINQ.For more information about speedup, see Understanding Speedup in PLINQ.

EsempioExample

// 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 è progettato per sfruttare le opportunità di parallelizzazione.PLINQ is designed to exploit opportunities for parallelization. Tuttavia, l'esecuzione parallela non è vantaggiosa per tutte le query.However, not all queries benefit from parallel execution. Quando una query contiene un delegato utente singolo che esegue operazioni minime, ad esempio, risulta in genere più veloce l'esecuzione sequenziale.For example, when a query contains a single user delegate that does very little work, the query will usually run faster sequentially. Il motivo è che il sovraccarico correlato all'abilitazione dell'esecuzione parallela è superiore all'aumento di velocità ottenuto.This is because the overhead involved in enabling parallelizing execution is more expensive than the speedup that is obtained. PLINQ pertanto non parallelizza automaticamente ogni query.Therefore, PLINQ does not automatically parallelize every query. Esamina prima di tutto la forma della query e i vari operatori inclusi.It first examines the shape of the query and the various operators that comprise it. In base a questa analisi, in modalità di esecuzione predefinita PLINQ può decidere di eseguire alcune o tutte le query in sequenza.Based on this analysis, PLINQ in the default execution mode may decide to execute some or all of the query sequentially. In alcuni casi, tuttavia, l'utente potrebbe avere più informazioni sulla query rispetto a quelle che PLINQ è in grado di determinare dall'analisi.However, in some cases you may know more about your query than PLINQ is able to determine from its analysis. Si potrebbe ad esempio sapere che un delegato è molto costoso e che la parallelizzazione offre sicuramente vantaggi per la query.For example, you may know that a delegate is very expensive, and that the query will definitely benefit from parallelization. In questi casi, è possibile usare il metodo WithExecutionMode e specificare il valore ForceParallelism per indicare a PLINQ di eseguire sempre la query in parallelo.In such cases, you can use the WithExecutionMode method and specify the ForceParallelism value to instruct PLINQ to always run the query as parallel.

Compilazione del codiceCompiling the Code

Tagliare e incollare questo codice nell'esempio di dati PLINQ e chiamare il metodo da Main.Cut and paste this code into the PLINQ Data Sample and call the method from Main.

Vedere ancheSee Also

AsSequential
Parallel LINQ (PLINQ)Parallel LINQ (PLINQ)