Anvisningar: Ange körningsläge i PLINQ
Det här exemplet visar hur du tvingar PLINQ att kringgå standard-heuristiken och parallellisera en fråga oavsett frågans form.
Kommentar
Det här exemplet är avsett att demonstrera användning och kanske inte körs snabbare än motsvarande sekventiella LINQ-till-objekt-fråga. Mer information om hastighet finns i Förstå hastighet i PLINQ.
Exempel
// 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 är utformat för att utnyttja möjligheter till parallellisering. Alla frågor drar dock inte nytta av parallell körning. När en fråga till exempel innehåller ett enskilt användardelegat som inte fungerar så mycket körs frågan vanligtvis snabbare sekventiellt. Sekventiell körning går snabbare eftersom det är dyrare att aktivera parallellisering av körning än den hastighet som erhålls. PLINQ parallelliserar därför inte automatiskt varje fråga. Den undersöker först frågans form och de olika operatorer som utgör den. Baserat på den här analysen kan PLINQ i standardkörningsläget besluta att köra en del av eller hela frågan sekventiellt. Men i vissa fall kanske du vet mer om din fråga än vad PLINQ kan avgöra från analysen. Du kanske till exempel vet att ett ombud är dyrt och att frågan definitivt kommer att dra nytta av parallellisering. I sådana fall kan du använda WithExecutionMode metoden och ange värdet ForceParallelism för att instruera PLINQ att alltid köra frågan som parallell.
Kompilera koden
Klipp ut och klistra in den här koden i PLINQ-dataexemplet och anropa metoden från Main
.