Was ist eine parallele Abfrage?
Viele Aspekte einer PLINQ-Abfrage ähneln nicht-parallelen LINQ-zu-Objekt-Abfragen. Wie sequentielle LINQ-Abfragen führen PLINQ-Abfragen Operationen an jeder IEnumerable- oder IEnumerable-Datenquelle im Speicher aus<T> und verschieben die Ausführung, d. h. sie beginnen erst mit der Ausführung, wenn die Abfrage aufgezählt ist. Der Hauptunterschied ist, dass PLINQ versucht, das Beste aus allen Prozessoren auf deinem System herauszuholen. Die Methode besteht darin, die Datenquelle in Fragmente zu unterteilen und dann parallele Abfragen auf mehreren Prozessoren für jedes Fragment in einem separaten Worker-Thread durchzuführen. In vielen Fällen bedeutet parallele Ausführung, dass Abfragen deutlich schneller laufen.
Bei paralleler Ausführung kann PLINQ die Leistung deutlich verbessern (im Vergleich zu älterem Code für bestimmte Abfragetypen), oft indem einfach AsParallel-Abfrageoperationen zur Datenquelle hinzugefügt werden. Allerdings kann Parallelismus eine eigene Komplexität mit sich bringen, sodass nicht alle Abfrageoperationen in PLINQ schneller ablaufen. Tatsächlich verlangsamt Parallelismus einige Anfragen. Daher ist es wichtig zu verstehen, wie Themen wie Sortieren parallele Abfragen beeinflussen. Weitere Informationen finden Sie unter Understanding Acceleration in PLINQ.
Einfaches Beispiel
Für 10.000 Datenstücke in der Sammlung lautet der Code wie folgt:
Weitere von PLINQ verwendete Funktionen
1. Mit AsSequential können Sie, wenn Sie im Prozess keine parallelen Abfragen verwenden möchten, diese Funktion nutzen, um sequentielle Abfragen wiederherzustellen.
2. Bei Verwendung von AsOrdered können die Ergebnisse durch parallele Ausführung von PLINQ nicht in der richtigen Reihenfolge sein, was durch Hinzufügen der AsOrderd-Methode abgefragt werden kann.
3. Mit WithDegreeOfParallelism kann diese Eigenschaft die Anzahl der parallelen CUPs auf dem Computer festlegen.
Szenenanmerkung
In vielen Fällen können Abfragen parallelisiert werden, aber der Overhead für die Einrichtung paralleler Abfragen kann die Leistungsgewinne überwiegen.Wenn die Abfrage nicht viele Berechnungen durchführt oder die Datenquelle klein ist, kann die PLINQ-Abfrage langsamer sein als eine sequentielle LINQ-zu-Objekte-Abfrage。 Sie können den Parallel Performance Analyzer im Visual Studio Team Server verwenden, um die Leistung verschiedener Abfragen zu vergleichen, Verarbeitungsengpässe zu finden und festzustellen, ob Abfragen parallel oder sequentiell ausgeführt werden.
Referenz:Der Hyperlink-Login ist sichtbar.
|