Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 3240|Отговор: 2

[Източник] .NET/C# оптимизация на производителността чрез PLINQ паралелна заявка

[Копирай линк]
Публикувано в 2.03.2024 г. 17:30:49 ч. | | | |
Какво е паралелна заявка?

Много аспекти на 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, за да сравните производителността на различни заявки, да откриете тесни места в обработката и да определите дали заявките се изпълняват паралелно или последователно.

Препратка:Входът към хиперлинк е видим.





Предишен:【Practical Combat】OpenWrt инсталация на luci-app plugin tutorial
Следващ:SQL Server използва разширени събития за проследяване на проблеми с блокиране
 Хазяин| Публикувано в 20.03.2024 г. 22:29:27 ч. |
HuairongChen Публикувано на 2024-3-20 16:05
Използвах Parallel, за да удвоя производителността на синхронния паралелизъм, но също така трябва да обърна внимание на проблема с паралелната обработка на данни...

Поставяш предмет+=1; Заменете го с thread.sleep (100) за по-очевиден контраст
Публикувано в 20.03.2024 г. 16:05:24 ч. |


Използвах Parallel, за да позволя синхронен паралелизъм и да удвоя производителността, но също така трябва да обърна внимание на проблема с паралелната обработка на данни
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com