Čo je paralelný dotaz?
Mnohé aspekty PLINQ dotazu sú podobné neparalelným LINQ to Objects dotazom. Rovnako ako sekvenčné LINQ dotazy, aj PLINQ dotazy vykonávajú operácie na ľubovoľnom zdroji dát v pamäti IEnumerable alebo IEnumerable<T> a odkladajú vykonávanie, t. j. nezačnú sa vykonávať, kým nie je dotaz vyčíslovaný. Hlavný rozdiel je v tom, že PLINQ sa snaží čo najlepšie využiť všetky procesory vo vašom systéme. Metóda spočíva v rozdelení dátového zdroja na fragmenty a následnom vykonávaní paralelných dotazov na viacerých procesoroch pre každý fragment v samostatnom pracovnom vlákne. V mnohých prípadoch paralelné vykonávanie znamená, že dotazy bežia výrazne rýchlejšie.
Pri paralelnom vykonávaní môže PLINQ výrazne zlepšiť výkon (v porovnaní so starším kódom pre určité typy dotazov), často jednoducho pridaním AsParallel dotazovacích operácií do dátového zdroja. Paralelizmus však môže priniesť vlastnú zložitosť, takže nie všetky dotazovacie operácie bežia v PLINQ rýchlejšie. V skutočnosti paralelizmus niektoré dotazy spomaľuje. Preto je dôležité pochopiť, ako otázky ako triedenie ovplyvnia paralelné dotazy. Pre viac informácií pozri Pochopenie zrýchlenia v PLINQ.
Jednoduchý príklad
Pre 10 000 dát v kolekcii je kód nasledovný:
Ďalšie funkcie používané PLINQ
1. Použitím AsSequential, ak nechcete používať paralelné dotazy v procese, môžete túto funkciu použiť na obnovenie sekvenčných dotazov.
2. Pri použití AsOrdered, keďže PLINQ beží paralelne, výsledky nemusia byť v poradí, čo sa dá dotazovať pridaním metódy AsOrdered.
3. Použite WithDegreeOfParallelism, táto vlastnosť umožňuje nastaviť počet CUP paralelne na počítači.
Poznámka k scéne
V mnohých prípadoch je možné dotazy paralelizovať, ale režijné náklady na nastavenie paralelných dotazov môžu prevážiť výkonnostné zisky.Ak dotaz nevykoná veľké množstvo výpočtov alebo ak je zdroj dát malý, dotaz PLINQ môže byť pomalší ako sekvenčný dotaz LINQ na objekty。 Môžete použiť Parallel Performance Analyzer vo Visual Studio Team Server na porovnanie výkonu rôznych dotazov, nájdenie úzkych miest v spracovaní a určenie, či dotazy bežia paralelne alebo sekvenčne.
Referencia:Prihlásenie na hypertextový odkaz je viditeľné.
|