Procédure : spécifier le mode d’exécution avec PLINQ

Cet exemple montre comment forcer PLINQ à contourner ses paramètres heuristiques et à paralléliser une requête quelle que soit sa forme.

Notes

Cet exemple, destiné à illustrer l'utilisation, peut ne pas s'exécuter plus rapidement que la requête séquentielle équivalente de LINQ to Objects. Pour plus d’informations sur l’accélération, consultez Fonctionnement de l’accélération dans PLINQ.

Exemple

// 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. Toutefois, toutes les requêtes ne bénéficient pas de l’exécution parallèle. Par exemple, lorsqu’une requête contient un délégué d’utilisateur unique qui travaille peu, elle est généralement exécutée plus rapidement de manière séquentielle. L’exécution séquentielle est plus rapide car la surcharge impliquée dans l’activation de l’exécution parallèle est plus coûteuse que l’accélération obtenue. Par conséquent, PLINQ ne pas parallélise pas automatiquement chaque requête. Il examine d’abord la forme de la requête et les différents opérateurs qui la composent. 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é. 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. Par exemple, vous pouvez savoir qu’un délégué est coûteux et que la requête bénéficiera assurément de la parallélisation. 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.

Compilation du code

Coupez et collez ce code dans l’échantillon de données PLINQ et appelez la méthode à partir de Main.

Voir aussi