Procedure: De uitvoeringsmodus opgeven in PLINQ
In dit voorbeeld ziet u hoe u PLINQ dwingt om de standaard heuristiek te omzeilen en een query parallel te maken, ongeacht de shape van de query.
Notitie
Dit voorbeeld is bedoeld om het gebruik te demonstreren en kan mogelijk niet sneller worden uitgevoerd dan de equivalente sequentiële LINQ naar objectenquery. Zie Inzicht in snelheid in PLINQ voor meer informatie over versnelling.
Opmerking
// 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 is ontworpen om kansen voor parallelle uitvoering te benutten. Niet alle query's profiteren echter van parallelle uitvoering. Wanneer een query bijvoorbeeld één gemachtigde gebruiker bevat die weinig werk doet, wordt de query meestal sneller uitgevoerd. Sequentiële uitvoering is sneller omdat de overhead bij het inschakelen van parallelle uitvoering duurder is dan de snelheid die wordt verkregen. Daarom wordt met PLINQ niet automatisch elke query parallelliseren. Eerst worden de vorm van de query en de verschillende operatoren waaruit deze bestaat onderzocht. Op basis van deze analyse kan PLINQ in de standaarduitvoeringsmodus besluiten om enkele of alle query's opeenvolgend uit te voeren. In sommige gevallen weet u echter meer over uw query dan dat PLINQ kan bepalen vanuit de analyse. U weet bijvoorbeeld dat een gemachtigde duur is en dat de query zeker zal profiteren van parallelle uitvoering. In dergelijke gevallen kunt u de WithExecutionMode methode gebruiken en de ForceParallelism waarde opgeven om PLINQ te instrueren om de query altijd als parallel uit te voeren.
De code compileren
Knip en plak deze code in het PLINQ-gegevensvoorbeeld en roep de methode aan van Main
.