Vorgehensweise: Angeben des Ausführungsmodus in PLINQ

Dieses Beispiel zeigt, wie erzwungen wird, dass PLINQ seine Standardheuristik umgeht und eine Abfrage unabhängig von der Form parallelisiert.

Hinweis

Dieses Beispiel soll die Nutzung darstellen und wird möglicherweise nicht schneller ausgeführt als die entsprechende sequenzielle LINQ to Objects-Abfrage. Weitere Informationen finden Sie unter Grundlagen zur Beschleunigung in PLINQ.

Beispiel

// 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 ist dazu konzipiert, Gelegenheiten zur Parallelisierung auszunutzen. Nicht alle Abfragen profitieren jedoch von der parallelen Ausführung. Wenn eine Abfrage z. B. einen einzelnen Benutzerdelegaten enthält, der wenig ausführt, ist die sequenzielle Ausführung der Abfrage in der Regel schneller. Die sequenzielle Ausführung ist schneller, da sich der Mehraufwand zum Aktivieren der parallelen Ausführung im Vergleich zur erzielten Beschleunigung nicht rentiert. Darum parallelisiert PLINQ nicht automatisch jede Abfrage. Zunächst werden die Form der Abfrage und die verschiedenen enthaltenen Operatoren untersucht. Auf Grundlage dieser Analyse kann PLINQ im Standardausführungsmodus entscheiden, die Abfrage zum Teil oder im Ganzen sequenziell auszuführen. In einigen Fällen wissen Sie jedoch vielleicht mehr über die Abfrage, als PLINQ in seiner Analyse ermitteln kann. Möglicherweise wissen Sie, dass ein Delegat aufwendig ist und die Abfrage definitiv von einer Parallelisierung profitiert. In solchen Fällen können Sie mit der WithExecutionMode-Methode den ForceParallelism-Wert angeben und PLINQ anweisen, die Abfrage stets parallel auszuführen.

Kompilieren des Codes

Schneiden Sie diesen Code aus, fügen Sie ihn in das PLINQ-Datenbeispiel ein, und rufen Sie die Methode in Main auf.

Siehe auch