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.
Attenzione |
---|
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
Concetti
Cronologia delle modifiche
Data |
Cronologia |
Motivo |
---|---|---|
Maggio 2010 |
Aggiunta nota sull'utilizzo rispetto all'aumento di velocità. |
Commenti e suggerimenti dei clienti. |