#ienumerable — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #ienumerable, aggregated by home.social.
-
Бенчмаркая ZLinq: один IEnumerable в сигнатуре — и .NET 10 быстрее библиотеки в 3,9 раза
ZLinq — замена LINQ без аллокаций. На .NET 8 и .NET 9 время одинаковое. На .NET 10 иначе: массив тот же, но если параметр объявлен как IEnumerable, foreach перебирает его в 2,58–3,89 раза быстрее ZLinq. Причина видна в машинном коде, память замерена отдельно.
https://habr.com/ru/articles/1065192/
#ZLinq #LINQ #IEnumerable #аллокации #бенчмарк #BenchmarkDotNet #производительность #NET_10 #JIT #дизассемблер
-
Ленивый LINQ: разбираем yield и ленивые вычисления по кирпичикам. Часть 2
В первой части мы успешно вскрыли чёрный ящик LINQ: написали Where вручную, разобрались, как компилятор превращает yield return в конечные автоматы, и посмотрели на методы с частичной буферизацией. Но LINQ был бы не собой, если бы на этом всё закончилось. Во второй части переходим к «тяжёлой артиллерии» — OrderBy , GroupBy и Join . Эти методы вынуждены нарушить главный завет ленивых вычислений: они материализуют данные в памяти, прежде чем отдать хоть один элемент. Но как именно? После этой статьи LINQ перестанет быть чёрным ящиком: вы будете точно понимать, сколько памяти съест каждая цепочка методов и в каком порядке следует вызывать эту цепочку.
https://habr.com/ru/articles/1062802/
#net #linq #yield #c# #компилятор #итераторы #ленивые_вычисления #отложенное_выполнение #ienumerable #deffered_execution
-
Ленивый LINQ: разбираем yield и ленивые вычисления по кирпичикам
Каждый C#‑разработчик писал numbers.Where(x => x > 10).Select(x => x * 2) — и удивлялся, узнав, что эта строчка ничего не вычисляет. Цепочка спит, пока мы не начнём перебирать результат. За этим стоит конкретный механизм — отложенные вычисления, а в его основе лежит обычная фича языка: yield . Разбираем, как устроены ленивые методы LINQ изнутри — от ручной реализации Where без yield до того, во что этот yield разворачивается компилятором. А вы точно знаете, что происходит под капотом каждый раз, когда пишете .Where(...).Select(...) ? К статье приложен репозиторий с полной реализацией.
https://habr.com/ru/articles/1061386/
#C# #LINQ #yield #NET #отложенные_вычисления #deffered_execution #итераторы #IEnumerable #ленивые_вычисления #компилятор