Оператор LINQ быстрее, чем 'foreach' цикл?

Я пишу Сетчатому менеджеру по Рендерингу и думал, что это будет хорошая идея сгруппировать все сетки, которые используют ту же программу построения теней и затем представляют их, в то время как я нахожусь в той передаче программы построения теней.

Я в настоящее время использую a foreach цикл, но задался вопросом, если использование LINQ могло бы дать мне увеличение производительности?

111
задан user247702 29 August 2016 в 15:29
поделиться

5 ответов

Почему LINQ должен быть быстрее? Он также использует циклы внутри.

В большинстве случаев LINQ будет немного медленнее, потому что это приводит к накладным расходам. Не используйте LINQ, если вам важна производительность. Используйте LINQ, потому что вам нужен более короткий, удобочитаемый и поддерживаемый код.

198
ответ дан 24 November 2019 в 02:58
поделиться

Я думаю, что LINQ лучше использовать в цикле foreach , потому что он дает более чистый и простой для понимания код. Но LINQ медленнее, чем foreach . Чтобы узнать больше, прочтите статью LINQ против FOREACH против FOR Loop Performance .

18
ответ дан 24 November 2019 в 02:58
поделиться

LINQ сейчас работает медленнее, но в какой-то момент может стать быстрее. Преимущество LINQ в том, что вам не нужно заботиться о том, как он работает. Если придумать новый метод, который будет невероятно быстрым, люди в Microsoft смогут реализовать его, даже не сообщая вам, и ваш код будет намного быстрее.

Что еще более важно, LINQ намного легче читать. Этого должно быть достаточно.

15
ответ дан 24 November 2019 в 02:58
поделиться

LINQ-to-Objects обычно добавляет некоторые маргинальные накладные расходы (несколько итераторов и т. Д.). Он по-прежнему должен выполнять циклы, и имеют вызовы делегатов, и , как правило, должны будут выполнить дополнительное разыменование, чтобы добраться до захваченных переменных и т. Д. В большинстве кодов это будет практически необнаружимо, и больше, чем , предоставляемое более простым для понимания кодом.

С другими поставщиками LINQ, такими как LINQ-to-SQL, тогда, поскольку запрос может фильтровать на сервере, он должен быть лучше , чем простой foreach , но, скорее всего, вы этого не сделаете. 'В любом случае не делали бланк "select * from foo" , так что это не обязательно сравнение.

Re PLINQ; параллелизм может сократить прошедшее время, но общее время ЦП обычно немного увеличивается из-за накладных расходов на управление потоками и т. д.

56
ответ дан 24 November 2019 в 02:58
поделиться

Вы можете повысить производительность, если используете параллельный LINQ для многоядерных процессоров. См. Параллельный LINQ (PLINQ) (MSDN).

9
ответ дан 24 November 2019 в 02:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: