Ускорение обычно не является проблемой само по себе, особенно в сценарии, подобном этому, где не будет существенной разницы в производительности (и в целом, если код не является узким местом, это просто не имеет значения).Вопрос в том, что является более читабельным и более четко выражает намерение кода.
Я думаю, что второй блок кода более четко выражает предназначение кода.Он читается как «запрос коллекции имен файлов для некоторых имен файлов с определенным свойством», а затем «для каждого из этих имен файлов с этим свойством сделайте что-нибудь».Он заявляет о том, что происходит, а не о том, как это произойдет.Отделение механизма «что» от механизма - это то, что делает второй блок кода более понятным и где LINQ действительно сияет.Используйте LINQ, чтобы объявить что, и позвольте LINQ реализовать механизм, а не в прошлом, когда что-то будет мешать с механизмом.
Является ли LINQ быстрее или просто удобнее?
Итак, чтобы ответить на вопрос в вашем заголовке, LINQ обычно не существенно снижает производительность, но делает код более понятным, позволяя кодировщику объявлять то, что он хочет, вместо того, чтобы сосредоточиться на том, как он хочет что-то сделать.В конце концов, мы не заботимся о том, как, мы заботимся о том, что.
Я знаю, что они логически одинаковы из-за отложенного выполнения, но что будет быстрее?
Вероятно, императивная версия, поскольку при использовании LINQ накладные расходы незначительны.Но если вы действительно должны знать, что быстрее, обязательно используйте профилировщик и обязательно протестируйте на реальных данных.
И почему?
Потому что LINQдобавляет немного накладных расходов.Но компромисс значительно более понятный и более понятный код.Это огромная победа по сравнению с обычно несущественной потерей производительности.