Когда я должен использовать AsParallel () в linq / plinq - PullRequest
9 голосов
/ 12 ноября 2010

Я собираюсь использовать преимущества параллельного программирования в linq с помощью plinq, я не уверен, что полностью понимаю использование, за исключением того факта, что он собирается использовать все ядра ЦП более эффективно, поэтому для большого запроса может быть быстрее Могу ли я просто вызывать AsParallel () для вызовов linq, чтобы использовать функциональность eplinq, и это всегда будет быстрее? Или я должен использовать его только при наличии большого количества данных для запроса или обработки?

Ответы [ 2 ]

7 голосов
/ 12 ноября 2010

Нельзя просто предположить, что параллельное выполнение всегда быстрее.Это зависит.В некоторых ситуациях вы много выиграете от многоядерных процессоров, если будете делать что-то параллельно.В других случаях вы просто замедляете работу, поскольку параллельные циклы имеют небольшой перегрев по сравнению с простыми циклами.

Например, см. мой другой ответ , который объясняет, почему встроенные параллельные циклы могут бытькатастрофа.

Теперь лучший способ узнать, является ли хорошей идеей использовать параллельный цикл в точном контексте, - это для проверки как параллельных, так и не параллельных реализаций, и измерения времени.они берут.

3 голосов
/ 12 ноября 2010

Для дальнейшего добавления к ответу, это также зависит от ваших данных. Пройдя немного «старой школы» на мгновение, вы можете пойти по пути раскручивания петли, используя вместо foreach, и так далее, и так далее.

Однако вам действительно нужно убедиться, что вы не оптимизируете микро. В зависимости от ваших выборок данных и размера данных (конечно же, с постраничными данными), вы, вероятно, можете обойтись без его использования.

Это не значит, что делать многоядерный процессор linq не круто. Но следует помнить о затратах на настройку для выполнения чего-либо подобного и иметь возможность сопоставить преимущества со сложностями обслуживания и отладки этого кода.

Если ваш алгоритм уже на высшем уровне, то, возможно, стоит взглянуть на расширения plinq, механизм уменьшения карты или тому подобное. Но сначала проверьте ваш алгоритм и ваши общие преимущества. Работа с правильным видом коллекции (и т. Д.) Правильным способом всегда принесет свои преимущества (и проблемы!).

Что вы пытаетесь решить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...