Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, Serginio1, Вы писали:
S>>Тоесть итог всей этой болтовни таков. Ты против yield потому, что он с ленивость привносит накладные расходы.
I>Очевидно, это не так. Я спокойно использую yield там, где это не является узким место. И я точно знаю, где начинается это узкое место.
S>>Какие именно? MoveNext и Current я так понимаю. Но на этом Linq то и основан.
I>Linq основан на IQueryable, а IEnumerable нужн рассматривать как оптимизацию частного случая.
И откуда ты ото взял. При этом бОльшая часть линка используется именно для IEnumerable.
Деревья выражений не используются в IEnumerable, но ты не против них!
S>>А List этих расходов не привносит, хотя нужна лишняя память для заполнение Lista даже если эти данные не понадобятся и лишние вызовы лямд если эти данные уже и не нужны
I>В большинстве случаев дополнительная память не нужна. В остальных случаях тоже не все однозначно. Ленивый процессинг можно сорганизовать самыми разными способами с производительностью не хуже IEnumerable.
Еще раз List реализует IEnumerable, но заполнение List ну ни хрена не ленива!!
I>Естественно, я не предлагаю везде заменить IEnumerable массивом. Это стоит делать в числодробилках, когда устраняем узкое место.
I>Чтото мне подсказывает,через три сообщение напишешь "а ты предлагаешь везде отказаться от IEnumerable и перевести всё на массивы"
Так массив и реализует IEnumerable.
В числодробилках можно применять Linq и
https://github.com/antiufo/roslyn-linq-rewrite
Или другие способы генерации кода например Source Generator
https://devblogs.microsoft.com/dotnet/introducing-c-source-generators/