Обновить
30
0
Кирилл@teoadal

Senior .NET Developer

Отправить сообщение

Inline и throw

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели15K

Изучая производительность методов в различных коллекциях, я наткнулся на интересный факт: там, где нужно выбросить Exception, программисты дёргают метод в статическом классе, в котором и происходит throw. Поначалу я думал, что это просто удобно — иметь все ошибки в одном месте и там следить за их единообразием. Это да, это действительно удобно. Но есть нюанс...

Читать далее

Dictionary<int, T>: очень специальный

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели5.4K

Как-то раз была поставлена задача ускорить работу с Dictionary<int,?>, где ключом всегда выступал int, а значением - структура. Имеющаяся скорость не устраивала. Более того, очень бы хотелось иметь возможность получать ссылку (ref) на значение в Dictionary, чтобы можно было изменять содержимое извне. В настоящий момент полнофункциональный словарь из dotnet такого поведения не поддерживает.

В статье, как и в предыдущей, речь пойдёт о наносекундах и экономии байтиков. Уверен, что 99% программистов этого не нужно, а подобные эксперименты без изучения environment'a будут даже опасны. Однако, если ваш профиль high-load или геймдев, данная информация может быть востребована.

Читать далее

Array: for/foreach или unsafe

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели9.1K

Я много работаю с массивами, поэтому хотел бы освежить тему того, как наиболее быстро по нему перемещаться в C#. Речь пойдёт об экономии наносекунд и оптимизации на уровне IL-кода. Кажется, что в 99% случаев вам это знать не нужно и задумываться об этом не стоит. Тем не менее, для горячих сценариев или если вы из high-load или геймдева, вам это может пригодиться.

Читать далее

Снижение аллокации при замыкании (closure)

Время на прочтение6 мин
Охват и читатели14K

Недавно у меня появилась задача по снижению аллокации в очень горячем месте кода. Там происходит тривиальное: запускаются Task'и в которых заранее известным набором handler'ов обрабатываются объекты. Вооружившись профайлером, я с удивлением обнаружил, что много памяти (и много времени GC) затрачивается на удаление объектов-замыканий.

Читать далее

Свой конвертер JSON или ещё немного про ExpressionTrees

Время на прочтение8 мин
Охват и читатели11K


Сериализация и десериализация — типичные операции, к которым современный разработчик относится как к тривиальным. Мы общаемся с базами данных, формируем HTTP-запросы, получаем данные через REST API, и часто даже не задумываемся как это работает. Сегодня я предлагаю написать свой сериализатор и десериализатор для JSON, чтобы узнать, что там «под капотом».
Читать дальше →

Свой mapper или немного про ExpressionTrees

Время на прочтение7 мин
Охват и читатели18K
image

Сегодня мы поговорим про то, как написать свой AutoMapper. Да, мне бы очень хотелось рассказать вам об этом, но я не смогу. Дело в том, что подобные решения очень большие, имеют историю проб и ошибок, а также прошли долгий путь применения. Я лишь могу дать понимание того, как это работает, дать отправную точку для тех, кто хотел бы разобраться с самим механизмом работы «мапперов». Можно даже сказать, что мы напишем свой велосипед.
Читать дальше →

Информация

В рейтинге
Не участвует
Откуда
Нижний Новгород, Нижегородская обл., Россия
Зарегистрирован
Активность

Специализация

Бэкенд разработчик, Фулстек разработчик
Ведущий
SQL
C#
ASP.NET MVC
Linq
.NET
ASP.NET
PostgreSQL