Какво е паралелна заявка?
Много аспекти на PLINQ заявката са подобни на непаралелните LINQ към обектни заявки. Подобно на последователните LINQ заявки, PLINQ заявките извършват операции върху всеки IEnumerable<T> или IEnumerable източник на данни в паметта и отлагат изпълнението, т.е. не започват да се изпълняват, докато заявката не бъде изброена. Основната разлика е, че PLINQ се стреми да извлече максимума от всички процесори във вашата система. Методът е да се раздели източникът на данни на фрагменти и след това да се извършват паралелни заявки на множество процесори за всеки фрагмент в отделна работна нишка. В много случаи паралелното изпълнение означава, че заявките се изпълняват значително по-бързо.
При паралелно изпълнение PLINQ може значително да подобри производителността (в сравнение със стария код за определени типове заявки), често чрез просто добавяне на операции за заявки AsParallel към източника на данни. Въпреки това, паралелизмът може да внесе собствена сложност, затова не всички операции за заявки се изпълняват по-бързо в PLINQ. Всъщност паралелизмът забавя някои заявки. Затова е важно да се разбере как въпроси като сортиране ще повлияят на паралелните заявки. За повече информация вижте Разбиране на ускорението в PLINQ.
Прост пример
За 10 000 данни в колекцията кодът е следният:
Други функции, използвани от PLINQ
1. Използвайки AsSequential, ако не искате да използвате паралелни заявки в процеса, можете да използвате тази функция за възстановяване към последователни заявки.
2. Използвайки AsOrdered, тъй като PLINQ работи паралелно, резултатите може да не са в реда, което може да бъде запитано чрез добавяне на метода AsOrder.
3. Използвайте WithDegreeOfParallelism, това свойство може да зададе броя на CUP-ите паралелно на компютъра.
Бележка към сцената
В много случаи заявките могат да бъдат паралелизирани, но натоварването при настройването на паралелни заявки може да надвишава печалбите от производителността.Ако заявката не извършва голям брой изчисления или ако източникът на данни е малък, PLINQ заявката може да е по-бавна от последователна заявка LINQ към обекти。 Можете да използвате Parallel Performance Analyzer в Visual Studio Team Server, за да сравните производителността на различни заявки, да откриете тесни места в обработката и да определите дали заявките се изпълняват паралелно или последователно.
Препратка:Входът към хиперлинк е видим.
|