RU

DotNext 2026

Выложу здесь в одну статью серию постов из моего ТГ канала про то, как в этом году прошёл DotNext. 25 и 26 сентября в Москве прошла очередная конфер…

DotNext2026конференция.NETC#ИИ
Habr
RU

Поменяли object на Lock, и два потока встретились в критической секции

В .NET 9 появился новый примитив синхронизации System.Threading.Lock , и многие команды начали заменять привычные object -замки на новый тип в поиск…

C#.NETкомпиляция кодапроизводительность приложениймногопоточностьблокировкисинхронизация потоковоптимизация кода
Habr
RU

RCE из одного XML-тега: разбираем небезопасную десериализацию XmlSerializer с нуля

Дисклеймер. Все описанное выполнялось в изолированной лаборатории на вымышленном приложении, которое я собрал специально для статьи. Совпадения имен…

небезопасная десериализацияXmlSerializerRCE.NETgadgetType.GetTypeдесериализацияdnSpyAppSecysoserial.net
Habr
RU

[Перевод] Как на wine.co.za упростили поиск по архиву из примерно 145 тысяч записей с помощью Manticore Search

На wine.co.za данные хранятся в MariaDB, раз в день копируются в Manticore, а сайт обращается к поиску через библиотеку для .NET. Разбираем, как уст…

Manticore SearchMariaDB.NETполнотекстовый поискпоисковые подсказкиwine.co.za
Habr
RU

Heartbeat: как мы создали систему управления системой вместо обычных сигналов

Привет! Меня зовут Александр Илларионов, я бэкенд‑разработчик в Altenar. Мы работаем на довольно сложном и при этом очень интересном…

heartbeatмикросервисыkubernetesprobesHealth Checks.NETC#мониторинграспределённые системыспортивные данные
Habr
RU

А чё, так можно было? Три места в .NET, которые не развидеть

Пустой наследник Random работает медленнее родителя. string[] и object[] оказываются одним объектом. А Matrix4x4 до сих пор держит шестнадцать полей…

.NETC#обратная совместимостьнаследованиеRandomSpanковариантность массивовMatrix4x4BenchmarkDotNetпроизводительность
Habr
RU

А чё, так можно было? Опечатка в исходниках .NET, которой больше 20 лет

В System.Random кто-то двадцать лет назад написал 21 вместо 31. Опечатку заметили, разобрали и оставили как есть — исправить, и new Random(42) начнё…

.NETC#Randomгенератор случайных чиселXoshiroBenchmarkDotNetпроизводительностьбезопасностьCLRсовместимость
Habr
RU

А чё, так можно было? Три недооценённых атрибута .NET

Три атрибута, которые меняют результат компиляции. Один запускает метод раньше Main . Второй передаёт текст выражения вместо результата. Третий уско…

.NETC#атрибутыModuleInitializerSkipLocalsInitCallerArgumentExpressionstackallocBenchmarkDotNetпроизводительностькомпилятор
Habr
RU

А чё, так можно было? Приватное поле за 0,25 наносекунды

Чтение приватного поля через рефлексию занимает 8,96 наносекунды и выделяет 24 байта в куче. Тот же доступ без рефлексии — 0,25 наносекунды и ноль б…

.NETC#UnsafeAccessorрефлексияприватные полябоксингBenchmarkDotNetпроизводительностьоптимизация.NET 10
Habr
RU

А чё, так можно было? Недокументированный C#

В C# есть четыре ключевых слова, которых нет в документации. Компилятор их принимает. Одно из них собирается на любой машине, а выполняется только н…

.NETC#недокументированные возможностиTypedReferenceключевые словаCLRрантаймкомпиляторвнутреннее устройствоотладка
Habr
RU

А чё, так можно было? Порядок полей = 1,8× к скорости

Класс без единого поля занимает 24 байта, с двумя полями int — те же 24, а с тремя — уже 32. В структуре достаточно поменять местами два поля, и её…

.NETC#памятьразмер объектаструктурывыравниваниеBenchmarkDotNetпроизводительностьоптимизацияCLR
Habr
RU

А чё, так можно было? +1 ключ = ×12 к скорости

В словарь добавляют 101 ключ — поиск занимает 8 763 наносекунды. Добавляют 102-й — 718. Ключей стало больше, а времени в 12 раз меньше. Разбираемся,…

.NETC#Dictionaryхеш-таблицаколлизииhash floodingBenchmarkDotNetпроизводительностьоптимизациябенчмарк
Habr
RU

Как пишут базы данных на C#: RavenDb

Эта база данных покоряет своей продуманностью: индексы рождаются автоматически, система обновляется без вашего участия, а защита данных стоит на стр…

RavenDbБаза ДанныхДокументно-ориентированнаямногомодельнаяС#.NETASP.NETOren EiniСоздание Базы ДанныхСУБД
Habr
RU

Месяц, 500M токенов и симулятор завода: как мы с ИИ-агентом построили имитационную модель производства чипов

Когда я прочёл о том, что Андрей Карпати больше не пишет код руками, а перешёл на агентное программирование, я, честно говоря призадумался. Скажи об…

Искусственный интеллектAI-кодингC#.NETимитационное моделированиеSimSharpLLMполупроводниковое производствоJSONRabbitMQ
Habr
RU

Архитектура TMS на .NET: кластер, потоки координат и объектное хранилище

Это разбор архитектуры системы управления транспортом — без сроков, без смет и без сравнения технологий по галочкам. Только устройство: из чего сист…

архитектура.NETинтеграцияEIPKafkaRabbitMQRedisPostgreSQLкластерпартиционирование
Habr
RU

Переезд с ESB на свой стек: что реально экономит бизнес

Разбираем систему управления транспортом — TMS.  Заказы приезжают из SAP, под них подбираются водитель и машина с учётом требований, рейс идёт…

миграцияESBWSO2рефакторингтехдолгинтеграция.NETархитектурастоимость разработкилегаси
Habr
RU

Сколько стоит интеграционный слой на WSO2 MI и EF Core: разбор реальной системы по строкам

Разбираем систему управления транспортом — TMS.  Не игрушечную и не с конференции: заказы приезжают из SAP, под них подбираются водитель и маши…

интеграцияESBWSO2Entity Frameworkлегасистоимость разработкитехдолг.NETархитектурамиграция
Habr
RU

Референсная архитектура платёжной платформы на.NET: схемы, границы транзакций, модули, кластер

В  прошлой статье  я разбирал платёжную платформу с точки зрения сметы: три слоя, где уходят человеко‑годы, что можно не пи…

архитектурафинтехплатёжная системаledgerидемпотентностьтранзакцииEIP.NETredbмикросервисы
Habr
RU

Платёжная платформа на.NET: во что она обходится и что из этого можно не писать

Разговор про финтех‑платформу почти всегда начинается не с той стороны. Обсуждают выбор брокера сообщений, спорят про микросерви…

финтехплатёжная системабиллингстоимость разработкиtime-to-marketинтеграцияOIDCэксплуатация.NETredb
Habr
RU

Конвейеры на Channels: как не получить тихую утечку памяти и вечно висящий воркер

Неограниченный канал спокойно работает до первого замедления потребителя, после чего очередь начинает расти, память — заканчиваться, а&nbs…

System.Threading.ChannelsC#.NETASP.NET Coreасинхронное программированиеканалыконвейеры обработки данныхобратное давлениефоновые задачиутечка памяти.
Habr
RU

Ленивый LINQ: разбираем yield и ленивые вычисления по кирпичикам

Каждый C#‑разработчик писал numbers.Where(x => x > 10).Select(x => x * 2)  — и удивлялся, узнав, что эта строчка ничего не в…

C#LINQyield.NETотложенные вычисленияdeffered executionитераторыIEnumerableленивые вычислениякомпилятор
Habr
RU

Почему не стоит судить себя по результатам собеседований

Работая в IT и общаясь с разными специалистами, я заметил интересную вещь: собеседования часто воспринимаются как объективная проверка знаний, хотя…

Собеседование.NETITIT собеседованиеC++Отказы в ITПлохой IT специалист
Habr
RU

redb.Identity: OAuth 2.1 / OpenID сервер на .NET, где протокол отделён от транспорта, по шине или вообще без сети

Есть три привычных способа сделать OAuth/OIDC в .NET, и каждый чем-то неудобен. Первый —  ASP.NET -привязанные  решения (Duende IdentitySe…

OAuth 2.1OpenID Connectidentity serverаутентификацияSSOOpenIddict.NETC#SCIMMFA
Habr
RU

redb.Route — коннектор RabbitMQ: RPC, конкурирующие консьюмеры и dead-letter. Уходим от MassTransit

Про Kafka в этой серии уже было. Теперь —  RabbitMQ , и с упором на то, как им пользоваться. Коннектор  redb.Route.RabbitMQ  — поверх…

RabbitMQAMQPброкер сообщенийочереди сообщенийMassTransitApache CamelEIPRPC.NETC#
Habr
RU

Метод, которого не существовало: как я собрал локальный RAG для CAD API

Последние годы инжиниринг живёт под одним лозунгом: то же самое, но дешевле и быстрее. Заказчики сокращают бюджеты и сроки, подрядчики ищут, какие п…

Smart3DCAD APIRAGLLMC#.NETгенерация кодавекторный поисклокальная языковая модельпромышленная автоматизация
Habr