Vad är en parallell fråga?
Många aspekter av en PLINQ-fråga liknar icke-parallella LINQ to Objects-frågor. Liksom sekventiella LINQ-frågor utför PLINQ-frågor operationer på alla IEnumerable eller IEnumerable<T> datakällor i minnet och skjuter upp exekveringen, det vill säga de börjar inte köras förrän frågan har räknats upp. Den största skillnaden är att PLINQ försöker utnyttja alla processorer i ditt system på bästa sätt. Metoden är att dela upp datakällan i fragment och sedan utföra parallella frågor på flera processorer för varje fragment i en separat arbetstråd. I många fall innebär parallell exekvering att frågor körs avsevärt snabbare.
Med parallell exekvering kan PLINQ avsevärt förbättra prestandan (jämfört med äldre kod för vissa typer av frågor), ofta genom att helt enkelt lägga till AsParallel-frågeoperationer i datakällan. Parallellism kan dock introducera sin egen komplexitet, så inte alla frågeoperationer går snabbare i PLINQ. Faktum är att parallellism faktiskt saktar ner vissa frågor. Därför är det viktigt att förstå hur frågor som sortering påverkar parallella frågor. För mer information, se Förstå acceleration i PLINQ.
Enkelt exempel
För 10 000 datadelar i samlingen är koden följande:
Andra funktioner som används av PLINQ
1. Med AsSequential, om du inte vill använda parallella frågor i processen, kan du använda denna funktion för att återställa sekventiella frågor.
2. Med AsOrdered, eftersom PLINQ körs parallellt, kan resultaten vara olagliga, vilket kan frågas genom att lägga till AsOrderd-metoden.
3. Använd WithDegreeOfParallelism, denna egenskap kan ställa in antalet CUP:er parallellt på datorn.
Scennotis
I många fall kan frågor parallelliseras, men överhuvudet för att sätta upp parallella frågor kan överväga prestandavinsterna.Om frågan inte utför ett stort antal beräkningar, eller om datakällan är liten, kan PLINQ-frågan vara långsammare än en sekventiell LINQ till Objekt-fråga。 Du kan använda Parallel Performance Analyzer i Visual Studio Team Server för att jämföra prestandan för olika frågor, hitta flaskhalsar i bearbetningen och avgöra om frågor körs parallellt eller sekventiellt.
Hänvisning:Inloggningen med hyperlänken är synlig.
|