Procédure : spécifier le mode d’exécution avec PLINQHow to: Specify the Execution Mode in PLINQ

Cet exemple montre comment forcer PLINQ à contourner ses paramètres heuristiques et à paralléliser une requête quelle que soit sa forme.This example shows how to force PLINQ to bypass its default heuristics and parallelize a query regardless of the query's shape.

Notes

Cet exemple est destiné à illustrer l’utilisation et peut ne pas s’exécuter plus rapidement que la requête LINQ to Objects séquentielle équivalente.This example is intended to demonstrate usage and might not run faster than the equivalent sequential LINQ to Objects query. Pour plus d’informations sur l’accélération, consultez Fonctionnement de l’accélération dans PLINQ.For more information about speedup, see Understanding Speedup in PLINQ.

ExempleExample

// 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 est conçu pour exploiter les opportunités de parallélisation.PLINQ is designed to exploit opportunities for parallelization. Toutefois, toutes les requêtes ne bénéficient pas de l’exécution parallèle.However, not all queries benefit from parallel execution. Par exemple, lorsqu’une requête contient un délégué d’utilisateur unique qui ne fonctionne que peu, la requête s’exécute généralement plus rapidement.For example, when a query contains a single user delegate that does little work, the query will usually run faster sequentially. L’exécution séquentielle est plus rapide, car la surcharge impliquée dans l’activation de la parallélisation d’exécution est plus coûteuse que l’accélération obtenue.Sequential execution is faster because the overhead involved in enabling parallelizing execution is more expensive than the speedup that's obtained. Par conséquent, PLINQ ne pas parallélise pas automatiquement chaque requête.Therefore, PLINQ does not automatically parallelize every query. Il examine d’abord la forme de la requête et les différents opérateurs qui la composent.It first examines the shape of the query and the various operators that comprise it. En fonction de cette analyse, en mode d’exécution par défaut PLINQ peut décider d’exécuter de manière séquentielle une partie de la requête ou sa totalité.Based on this analysis, PLINQ in the default execution mode may decide to execute some or all of the query sequentially. Toutefois, dans certains cas, vous pouvez en savoir plus sur votre requête que PLINQ n’est en mesure de déterminer à partir de son analyse.However, in some cases you may know more about your query than PLINQ is able to determine from its analysis. Par exemple, vous savez peut-être qu’un délégué est onéreux et que la requête bénéficiera de la parallélisation.For example, you may know that a delegate is expensive and that the query will definitely benefit from parallelization. Dans ce cas, vous pouvez utiliser la méthode WithExecutionMode et spécifier la valeur ForceParallelism pour indiquer à PLINQ de toujours exécuter la requête en parallèle.In such cases, you can use the WithExecutionMode method and specify the ForceParallelism value to instruct PLINQ to always run the query as parallel.

Compilation du codeCompiling the Code

Coupez et collez ce code dans l’échantillon de données PLINQ et appelez la méthode à partir de Main.Cut and paste this code into the PLINQ Data Sample and call the method from Main.

Voir aussiSee also