Я пишу Сетчатому менеджеру по Рендерингу и думал, что это будет хорошая идея сгруппировать все сетки, которые используют ту же программу построения теней и затем представляют их, в то время как я нахожусь в той передаче программы построения теней.
Я в настоящее время использую a foreach
цикл, но задался вопросом, если использование LINQ могло бы дать мне увеличение производительности?
Почему LINQ должен быть быстрее? Он также использует циклы внутри.
В большинстве случаев LINQ будет немного медленнее, потому что это приводит к накладным расходам. Не используйте LINQ, если вам важна производительность. Используйте LINQ, потому что вам нужен более короткий, удобочитаемый и поддерживаемый код.
Я думаю, что LINQ лучше использовать в цикле foreach
, потому что он дает более чистый и простой для понимания код. Но LINQ медленнее, чем foreach
. Чтобы узнать больше, прочтите статью LINQ против FOREACH против FOR Loop Performance .
LINQ сейчас работает медленнее, но в какой-то момент может стать быстрее. Преимущество LINQ в том, что вам не нужно заботиться о том, как он работает. Если придумать новый метод, который будет невероятно быстрым, люди в Microsoft смогут реализовать его, даже не сообщая вам, и ваш код будет намного быстрее.
Что еще более важно, LINQ намного легче читать. Этого должно быть достаточно.
LINQ-to-Objects обычно добавляет некоторые маргинальные накладные расходы (несколько итераторов и т. Д.). Он по-прежнему должен выполнять циклы, и имеют вызовы делегатов, и , как правило, должны будут выполнить дополнительное разыменование, чтобы добраться до захваченных переменных и т. Д. В большинстве кодов это будет практически необнаружимо, и больше, чем , предоставляемое более простым для понимания кодом.
С другими поставщиками LINQ, такими как LINQ-to-SQL, тогда, поскольку запрос может фильтровать на сервере, он должен быть лучше , чем простой foreach
, но, скорее всего, вы этого не сделаете. 'В любом случае не делали бланк "select * from foo"
, так что это не обязательно сравнение.
Re PLINQ; параллелизм может сократить прошедшее время, но общее время ЦП обычно немного увеличивается из-за накладных расходов на управление потоками и т. д.
Вы можете повысить производительность, если используете параллельный LINQ для многоядерных процессоров. См. Параллельный LINQ (PLINQ) (MSDN).