Что такое параллельный запрос?
Многие аспекты запроса PLINQ схожи с непараллельными запросами LINQ к объектам. Как и последовательные запросы LINQ, запросы PLINQ выполняют операции на любом источнике данных IEnumerable или IEnumerable<T> и откладывают выполнение, то есть не начинают выполняться, пока запрос не будет перечислен. Главное отличие в том, что 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, чтобы сравнить производительность различных запросов, найти узкие места в обработке и определить, выполняются ли запросы параллельно или последовательно.
Ссылка:Вход по гиперссылке виден.
|