Обновить
96.16

.NET *

Хаб со знаниями про .NET

Сначала показывать
Порог рейтинга
Уровень сложности

Object Pool коротко: экономим память в C# без лишнего мусора

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

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

Сегодня речь пойдёт про пул объектов, шаблон проектирования, позволяющий переиспользовать уже созданные экземпляры, вместо того чтобы порождать их заново. Меньше новых объектов и меньше работы сборщику мусора.

Читать далее

Оптимизация через партицирование

Уровень сложностиСложный
Время на прочтение30 мин
Охват и читатели8.6K

Привет, Хабр! Меня зовут Виталий Сушков, я .NET-разработчик и техлид в Т-Банке. 

На конференции DotNext в 2024 году я выступал с докладом о применении механизма декларативного партицирования таблиц в PostgreSQL. 

Я расшифровал и дополнил доклад. В статье расскажу об одном из наших сервисов, который фиксирует факты взаимодействия между банком и клиентами по вопросам кредитных задолженностей. Однажды этот сервис перестал справляться со своими обязанностями, потому что резко выросли объемы обрабатываемых данных. Покажу, как в условиях жестких ограничений по ресурсам и времени мы вернули этот сервис к жизни и с помощью партицирования обеспечили его стабильную работу в будущем. 

Читать далее

Создаём DSL на C#

Уровень сложностиПростой
Время на прочтение14 мин
Охват и читатели6.8K

Создаю собственный DSL на C#: рассказываю о том, как закладывается фундамент языка и как подойти к проекту подобного масштаба.

Читать далее

Превращаем C# в Python, JavaScript и F#

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

В С# 14 появился новый синтаксис расширений (extension members), позволяющий добавлять методы, свойства и даже перегружать операторы для существующих типов без создания врапперов и без изменения исходных типов.

Благодаря этому, стал возможен код как на обложке.

Выглядит, мягко говоря, необычно. Давайте разберёмся, что тут вообще происходит…

Читать далее

Паттерн Outbox для надежного обмена сообщениями в микросервисах

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

Работа с микросервисами достаточно сложная, как и с любой распределенной системой. Уменьшение количества возможных точек отказа должно быть одной из целей инженера, который проектирует распределенную систему. В этой статье мы постараемся достичь именно этого, используя паттерн Outbox.

Читать далее

Kaspirin: история о том, как ограничения помогли ускорить разработку

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели5.8K

Бывало, открываешь код-ревью — и чувствуешь себя археологом. Каждый кусок кода — как артефакт из разных времен: тут блестит бронзовая монетка, там торчит бивень мамонта, а чуть дальше — отпечатки времен .NET 4, пережившие три рефакторинга. Все это чудом взаимодействует, но порой страшно тронуть — вдруг вся конструкция рассыплется.

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

Мы в команде разработки пользовательского интерфейса поняли это, когда наш общий код перестал быть общим: его было слишком много, он жил своей жизнью, и никто уже не знал, что в нем есть и как оно работает. С этого начался Kaspirin — наш внутренний фреймворк, который мы создали не для расширения возможностей, а чтобы навести порядок и убрать лишнюю вариативность. Название придумалось само собой: смесь Kaspersky и aspirin — лекарство от головной боли, вызванной избыточной гибкостью.

Читать далее

Rustore. Делаем пуши для MAUI

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

Зарегистрировавшись в РуСторе быстренько перешёл в раздел для разработчиков и глянул на список доступных SDK. Но где же тут поддержка MAUI?

Давайте это исправим

Большое исследование C#-разработчиков

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели17K

Привет, Хабр. Я Катя Куваева, DevRel C#-разработчиков и инфраструктурных команд в Контуре, а это моя первая статья. 

Недавно ходила исследовать российское сообщество шарпистов, чтобы понять, чем оно живёт: как инженеры обмениваются знаниями, какие инструменты выбирают для развития, и какое место во всём этом занимают специализированные сообщества.

Сначала я провела 10 глубинных интервью, потом на их основе сформулировала несколько гипотез, которые нужно было проверить в количественном опросе на нескольких сотнях шарпистов. Самое интересное я собрала здесь, предлагаю посмотреть, что получилось 👇

Посмотрите, сколько разных эмоций я испытала за время общения с C#-разработчиками — и мы начинаем!

Читать далее

StructPadding

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

Представляю свою библиотеку для обнуления байт выравнивания (padding) в unmanaged структурах.

Обнуление байт паддинга (padding) обеспечивает детерминированное состояние памяти, что критически важно для двоичного сравнения или вычисления хэша. И не менее важно при бинарной сериализации.

Читать далее

.NET 10 и C# 14: что поменяется в вашем коде

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

11 ноября 2025 вышел .NET 10 - очередной LTS-релиз, который будет жить до ноября 2028 года.
За это время многие проекты успеют мигрировать с .NET 6/8/9, а значит, нас ждут не только новые плюшки, но и немного боли от breaking changes.

В этой статье постарался собрать всё самое важное на русском языке чтобы за раз всё поднять.

Читать далее

Высоконагруженный reverse-proxy на YARP

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

Привет, Хабр!

Сегодня поговорим о том, как на практике построить высоконагруженный обратный прокси-сервер на основе YARP, отличной библиотеки от Microsoft для .NET.

К статье

Расчет веса перевозимого груза самосвала

Уровень сложностиСложный
Время на прочтение21 мин
Охват и читатели4.7K

Определение веса самосвала в движении нетривиальная задача, в которой технические ограничения, тип подвески, принцип действия датчиков и качество телематической цепочки играют ключевую роль. Датчики нагрузки фиксируют показатели с высоким уровнем шума: дорожные неровности, динамика подвески и особенности конструкции кузова приводят к тому, что каждое измерение — лишь приближение к реальному весу. Для корректного расчёта требуется система, которая не только усредняет данные, но и адаптируется к качеству входных сигналов. Перед использованием алгоритмов обработки данных необходимо понимать конструкцию техники, доступные методы взвешивания и природу шума, возникающего в процессе измерений.

Три основных типа карьерных самосвалов в России

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

Классические карьерные самосвалы с жёсткой рамой, такие как БелАЗ 7555–7513 и CAT 777–793, оснащаются гидропневматической подвеской с датчиками давления. Эти датчики служат для оценки веса полезной нагрузки через измерение давления в подвеске. Однако их данные сильно зависят от темпа движения и амплитуды раскачки кузова, что создает шумы и неточности при динамическом движении. В качестве инженерного дополнения к измерению веса для таких моделей важно применять алгоритмы фильтрации и компенсации динамических колебаний, а также дополнять данные от датчиков давления весовыми сенсорами, установленными на шасси, для повышения точности оценки нагрузки и снижения влияния факторов движения. Для БелАЗ и CAT, реализованы высокоточные системы взвешивания с погрешностью в диапазоне до ±0,1–1%. Однако, из-за сильных вибраций и динамических пиков в процессе работы, количество данных с аномальными колебаниями составляет примерно 20–35%. Благодаря строгой конструкции и стабильной гидравлической и электронной схемам, такие системы обеспечивают относительно меньшую дисперсию и более предсказуемую точность, особенно при использовании фильтров и компенсационных алгоритмов.

Читать далее

Оптимизация обработки больших отчетов в .NET Core: от памяти к потокам

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

Оптимизация обработки больших отчетов в .NET Core: от памяти к потокам

Отчёты росли, память заканчивалась. Пришлось отказаться от словарей в пользу потоковой сериализации JSON. Делюсь, как реализовал запись отчёта «на лету» и заставил.NET работать с гигабайтами данных без OutOfMemory.

Читать далее

Ближайшие события

Гарантированная доставка данных с помощью библиотеки Polly. Наш опыт взаимодействия с единым реестром интернет-рекламы

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

Во многих задачах опоздания или ошибки при передаче данных могут привести к неприятным последствиям, например к штрафам. Чтобы всего этого избежать, нужно использовать повторную отправку запросов (а что делать, если мы не можем переотправлять вечно?), настраивать метрики и логирование, а также действия при ошибках и сбоях. Все это обширные и интересные темы, и я начну с первой. 

Привет, Хабр! Меня зовут Андрей Алексеенко, я техлид оператора рекламных данных (ОРД) «МедиаСкаут». Особенность нашего продукта — взаимодействие с единым реестром интернет-рекламы (ЕРИР), у которого очень жесткие требования. По данным Роскомнадзора, с января по октябрь 2024 года было вынесено 376 постановлений о нарушениях в сфере интернет-рекламы на общую сумму 24,4 млн рублей.

Чтобы обеспечить переотправку запроса, мы используем библиотеку Polly. Она позволяет реализовать стратегию повторной отправки, и в этом материале я расскажу, как ее можно внедрить в свой продукт. 

Читать далее

Нажми и забудь: как автоматизировать рутину с PowerShell и GUI

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

Нажми и забудь: как автоматизировать рутину с PowerShell и GUI

Это руководство пригодится всем, кто устал от рутины и хочет сделать свои PowerShell-скрипты доступными для коллег: системным администраторам, инженерам технической поддержки, DevOps-специалистам. Мы не только разберем основы создания кнопок и окон, но и ответим на ключевые вопросы: Как выбрать между WinForms и WPF, как избежать зависания интерфейса при выполнении долгих операций, и как удобно упаковать ваш скрипт в EXE или ярлык, чтобы любой сотрудник мог запустить его одним кликом.

Читать далее

Пошаговая настройка вывода логов из .NET-автотестов в ELK (Filebeat → Logstash → Elasticsearch → Kibana)

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

Всем привет, с вами Юрий Ковальчук, backend разработчик в ВебРайз. В этой статье разберем процесс вывода логов из приложения c автотестами на .NET в ELK с последующей визуализаций в Kibana.

ELK представляет из себя достаточно массивный инструмент для сбора, хранения, обработки и анализа логов, организации мониторингов. С наскоку разобраться с ним вряд ли получится, поэтому подготовили небольшую инструкцию с примерами - на базе простого теста прокинуть результаты до Kibana.

Читать далее

Время дорого стоит

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

У Контура более 10 тыс сотрудников и очень-очень много групповых встреч: около 30 тыс ежемесячно, мы считали. 👀 И бывает так, что нужно собрать сразу нескольких ребят в наиболее удобное для всех время. И начинается вот это вот: зайти на страницу человечка > посмотреть, какое время у него свободно > сопоставить со своим > проверить, а могут ли в это время остальные участники > обнаружить, что нет, и идти заново по кругу смотреть другие слоты, забывая, чё там у кого. 🙄 Да блин!

Мы решили остановить эту котовасию ✋🚫 и добавить в наш внутренний портал (в Контуре используется Стафф) рекомендацию свободных слотов для всех участников встречи. Рассказываем и показываем, как реализовали это.

Читать далее

Нечёткий поиск при пересечении множеств, или Как выжать все соки из Хэширования по сигнатуре

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

На просторах интернета легко можно найти материалы по реализации нечёткого поиска, в которых предполагается поиск одной строки в множестве строк M. Но что если возникнет необходимость реализовать нечёткое сравнение множества M₁ с множеством M₂? При классическом подходе нам придется выполнить M₁*M₂ сравнений - при линейном росте этих множеств, сложность задачи будет расти экспоненциально, в плане производительности это решение никуда не годиться!
В этой статье предложен вариант реализации ускоренного алгоритма для решения этой задачи. Теоретической новизны в проекте практически нет. Цели:
1 - Ознакомить с концепцией
2 - Дать конкретный пример интеграции в БД SQL(MSSQL)
3 - Ознакомить с возможностями на базе практической реализации

Читать далее

.NET 10 File-Based App: скрипты на C#?

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

Вышедший .NET 10 заинтриговал возможностью запускать одиночные .cs файлы подобно скриптам - без проектов и решений. Я решил разобраться как это использовать, что внутри, и действительно ли C# теперь можно отнести к скриптовым языкам.

Читать далее

Что нового в .NET 10?

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

Дождались! .NET 10 вот-вот выйдет, а значит, самое время запускать фейерверки и отмечать юбилей любимой платформы! Ну и, само собой, ознакомимся с улучшениями JIT, расширением стандартной библиотеки, новыми возможностями SDK и с другими нововведениями в этой статье.

Читать далее

Вклад авторов