Condividi tramite


Procedura: specificare la modalità di esecuzione in PLINQ

In questo esempio viene mostrato come forzare PLINQ a ignorare le proprie regole euristiche predefinite e parallelizzare una query indipendentemente dalla forma della query.

Nota di avvisoAttenzione

Lo scopo di questo esempio è dimostrare l'utilizzo e potrebbe non essere eseguito più velocemente dell'equivalente query LINQ to Objects sequenziale.Per ulteriori informazioni sull'aumento di velocità, vedere Informazioni sull'aumento di velocità in PLINQ.

Esempio

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
// 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();
}

PLINQ è progettato per sfruttare le opportunità di parallelizzazione. L'esecuzione parallela, tuttavia, non è vantaggiosa per tutte le query. Quando ad esempio una query contiene un solo delegato dell'utente che svolge una quantità minima di lavoro, in genere la query risulterà più veloce se eseguita in modo sequenziale. Ciò è dovuto al fatto che l'overhead necessario per consentire l'esecuzione parallela rappresenta uno svantaggio maggiore dei vantaggi ottenuti in termini di aumento di velocità. Pertanto, PLINQ non parallelizza automaticamente tutte le query. Invece, esamina prima la forma della query e i vari operatori che la costituiscono. In base a questa analisi, nella modalità di esecuzione predefinita PLINQ può decidere di eseguire in modo sequenziale l'intera query o parte di essa. Tuttavia, in alcuni casi è possibile avere una conoscenza più approfondita della query rispetto a quanto PLINQ sia in grado di determinare dalle proprie analisi. Ad esempio, è possibile sapere che un delegato è molto dispendioso e che la query certamente trarrà profitto dalla parallelizzazione. In tali casi è possibile utilizzare il metodo WithExecutionMode<TSource> e specificare il valore di ForceParallelism per indicare a PLINQ di eseguire sempre la query come parallela.

Compilazione del codice

Tagliare e copiare questo codice in PLINQ Data Sample e chiamare il metodo da Main.

Vedere anche

Riferimenti

AsSequential<TSource>

Concetti

Parallel LINQ (PLINQ)

Cronologia delle modifiche

Data

Cronologia

Motivo

Maggio 2010

Aggiunta nota sull'utilizzo rispetto all'aumento di velocità.

Commenti e suggerimenti dei clienti.