Co je to paralelní dotaz?
Mnoho aspektů dotazu PLINQ je podobných neparalelním dotazům LINQ to Objects. Stejně jako sekvenční LINQ dotazy, i PLINQ dotazy provádějí operace na jakémkoli zdroji dat v paměti IEnumerable nebo IEnumerable<T> a odkládají vykonání, tj. nezačínají se vykonávat, dokud není dotaz vyčíslen. Hlavní rozdíl je v tom, že PLINQ se snaží co nejlépe využít všechny procesory na vašem systému. Metoda spočívá v rozdělení datového zdroje na fragmenty a následném paralelním dotazování na více procesorech pro každý fragment v samostatném pracovním vlákně. V mnoha případech znamená paralelní vykonávání to, že dotazy běží výrazně rychleji.
Díky paralelnímu provádění může PLINQ výrazně zlepšit výkon (ve srovnání se starším kódem pro určité typy dotazů), často jednoduše přidáním dotazovacích operací AsParallel do datového zdroje. Paralelizismus však může přinést vlastní složitost, takže ne všechny dotazovací operace běží v PLINQ rychleji. Ve skutečnosti paralelizismus některé dotazy zpomaluje. Proto je důležité pochopit, jak otázky jako třídění ovlivní paralelní dotazy. Pro více informací viz Porozumění akceleraci v PLINQ.
Jednoduchý příklad
Pro 10 000 datových částí ve sbírce je kód následující:
Další funkce používané PLINQ
1. Pomocí AsSequential, pokud nechcete používat paralelní dotazy v procesu, můžete tuto funkci použít k obnovení na sekvenční dotazy.
2. Při použití AsOrdered, protože PLINQ běží paralelně, výsledky nemusí být v pořadí, což lze dotazovat přidáním metody AsOrderd.
3. Použijte WithDegreeOfParallelism, tato vlastnost může nastavit počet CUP paralelně na počítači.
Poznámka ke scéně
V mnoha případech lze dotazy paralelizovat, ale režijní režie při nastavování paralelních dotazů může převážit nad výkonnostními zisky.Pokud dotaz neprovede velké množství výpočtů nebo je zdroj dat malý, může být dotaz PLINQ pomalejší než sekvenční dotaz LINQ na objekty。 Můžete použít Parallel Performance Analyzer ve Visual Studio Team Server k porovnání výkonu různých dotazů, nalezení úzkých míst ve zpracování a určení, zda dotazy běží paralelně nebo sekvenčně.
Odkaz:Přihlášení k hypertextovému odkazu je viditelné.
|