А чё, так можно было? Три места в .NET, которые не развидеть
Пустой наследник Random работает медленнее родителя. string[] и object[] оказываются одним объектом. А Matrix4x4 до сих пор держит шестнадцать полей…
Latest Programming news from Tech News
Пустой наследник Random работает медленнее родителя. string[] и object[] оказываются одним объектом. А Matrix4x4 до сих пор держит шестнадцать полей…
В System.Random кто-то двадцать лет назад написал 21 вместо 31. Опечатку заметили, разобрали и оставили как есть — исправить, и new Random(42) начнё…
Три атрибута, которые меняют результат компиляции. Один запускает метод раньше Main . Второй передаёт текст выражения вместо результата. Третий уско…
Есть число, которое не меняется от смены знака. Минус перед ним ничего не делает, а модуля у него не существует: Math.Abs бросает исключение. Это in…
Ключ-структура из числа и строки. Поиск по словарю на 10 000 таких ключей занимает 74 975 микросекунд. Тот же ключ, объявленный record struct , — 3,…
Чтение приватного поля через рефлексию занимает 8,96 наносекунды и выделяет 24 байта в куче. Тот же доступ без рефлексии — 0,25 наносекунды и ноль б…
Класс без единого поля занимает 24 байта, с двумя полями int — те же 24, а с тремя — уже 32. В структуре достаточно поменять местами два поля, и её…
В словарь добавляют 101 ключ — поиск занимает 8 763 наносекунды. Добавляют 102-й — 718. Ключей стало больше, а времени в 12 раз меньше. Разбираемся,…
В .NET есть метод, который всегда возвращает false . Есть очистка списка, которая ничего не очищает. И есть new , после которого в куче пусто. Разбе…
Сортировка строк без компаратора работает не так, как кажется, и заметно дольше. Замерил на четырёх машинах и четырёх рантаймах, посчитал обращения…
Одни вызовы после OrderBy проходят набор один раз, другие приводят к полной сортировке. По коду разницы не видно. Давайте проверим счётчиком обращен…
Перегрузка Span.Sort с компаратором-структурой должна была работать быстрее обычной. Замер показал обратное: памяти она расходует больше всех, а вре…
Один Where в начале запроса — и метод медленнее в тысячу раз. Причём чем дальше страница, тем хуже: на первой разница полтора раза, на тысячной — по…
Один try/finally внутри метода — и он работает в разы медленнее. Сам блок тут ни при чём, он не выполняет ни одной лишней инструкции. Причина в реше…
Chunk делит коллекцию на массивы — одна строка кода. Но есть размер чанка, после которого он замедляется в разы при тех же данных и той же памяти. А…
StringBuilder делит текст на чанки по 8000 символов — вчетверо ниже порога кучи больших объектов. Запас такой, что попасть туда невозможно. Но чанк…
ArrayPool используют ради экономии на аллокациях. Но есть размеры, где он делает обратное: массив уходит в LOH, а через new остаётся в нулевом покол…
ZLinq — замена LINQ без аллокаций. На .NET 8 и .NET 9 время одинаковое. На .NET 10 иначе: массив тот же, но если параметр объявлен как IEnumerable,…
В документации к PropertyNameCaseInsensitive есть предупреждение про накладные расходы, но не сказано, когда они появятся. Замерил на четырёх машина…
Вы написали struct ради zero-allocation, прошли code review — а в проде Gen0-коллекции всё равно идут косяком. Самая дорогая аллокация та, которой н…