Wat is een parallelle query?
Veel aspecten van een PLINQ-query lijken op niet-parallelle LINQ to Objects-query's. Net als sequentiële LINQ-queries voeren PLINQ-queries bewerkingen uit op elke in-memory IEnumerable of IEnumerable<T> databron en stellen de uitvoering uit, dat wil zeggen, ze beginnen pas te worden uitgevoerd als de query is opgesomd. Het belangrijkste verschil is dat PLINQ probeert het meeste uit alle processors op je systeem te halen. De methode is om de databron op te splitsen in fragmenten en vervolgens parallelle queries uit te voeren op meerdere processors voor elk fragment in een aparte worker thread. In veel gevallen betekent parallelle uitvoering dat queries aanzienlijk sneller lopen.
Met parallelle uitvoering kan PLINQ de prestaties aanzienlijk verbeteren (vergeleken met oudere code voor bepaalde soorten zoekopdrachten), vaak door simpelweg AsParallel-queryoperaties aan de databron toe te voegen. Parallelisme kan echter zijn eigen complexiteit met zich meebrengen, waardoor niet alle querybewerkingen sneller verlopen in PLINQ. Parallelisme vertraagt zelfs sommige zoekopdrachten. Daarom is het belangrijk te begrijpen hoe kwesties zoals sorteren parallelle queers beïnvloeden. Voor meer informatie, zie Understanding acceleration in PLINQ.
Eenvoudig voorbeeld
Voor 10.000 gegevensstukken in de collectie is de code als volgt:
Andere functies die door PLINQ worden gebruikt
1. Met AsSequential, als je geen parallelle queries wilt gebruiken in het proces, kun je deze functie gebruiken om sequentiële queries te herstellen.
2. Met AsOrdered, omdat PLINQ parallel draait, kunnen de resultaten niet in volgorde zijn, wat kan worden doorgevraagd door de AsOrderd-methode toe te voegen.
3. Gebruik WithDegreeOfParallelism, deze eigenschap kan het aantal CUP's parallel op de computer instellen.
Scènenoot
In veel gevallen kunnen queries worden geparalleliseerd, maar de overhead van het opzetten van parallelle queries kan opwegen tegen de prestatieverbeteringen.Als de query niet veel berekeningen uitvoert, of als de databron klein is, kan de PLINQ-query trager zijn dan een sequentiële LINQ to Objects-query。 Je kunt de Parallel Performance Analyzer in Visual Studio Team Server gebruiken om de prestaties van verschillende queries te vergelijken, verwerkingsknelpunten te vinden en te bepalen of queries parallel of sequentieel draaien.
Referentie:De hyperlink-login is zichtbaar.
|