Partager via


Comment : spécifier le mode d'exécution en PLINQ

Cet exemple indique comment forcer PLINQ à ignorer sa méthode heuristique par défaut et paralléliser une requête indépendamment de sa forme.

Remarque AttentionAttention

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

Exemple

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 est conçu pour exploiter des possibilités de parallélisation Toutefois, l'exécution parallèle ne convient pas à toutes les requêtes. Par exemple, lorsqu'une requête contient un délégué mono-utilisateur qui exécute très peu de travail, une exécution séquentielle est en général plus rapide. La raison en est la surcharge impliquée par l'activation de l'exécution parallèle, qui se révèle plus coûteuse que l'accélération obtenue. Par conséquent, PLINQ ne parallélise pas automatiquement toutes les requêtes. Il examine d'abord la forme de la requête et les différents opérateurs dont elle composée. Sur la base de cette analyse, PLINQ, en mode d'exécution par défaut, peut décider d'exécuter certaines ou toutes les requêtes séquentiellement. Toutefois, dans certains cas, vous pouvez en savoir plus sur votre requête que PLINQ n'est en mesure de déterminer d'après son analyse. Par exemple, vous pouvez savoir qu'un délégué est très coûteux et que la requête bénéficiera assurément de la parallélisation. Dans les tels cas, vous pouvez utiliser la méthode WithExecutionMode<TSource> et spécifier la valeur ForceParallelism pour indiquer à PLINQ de toujours exécuter la requête comme une requête parallèle.

Compilation du code

Copiez et collez ce code dans l'exemple de données PLINQ (Données PLINQ, exemple) et appelez la méthode depuis Main.

Voir aussi

Référence

AsSequential<TSource>

Concepts

Parallel LINQ (PLINQ)

Historique des modifications

Date

Historique

Motif

Mai 2010

Remarque ajoutée concernant l'utilisation et l'accélération.

Commentaires client.