В .NET 10 появится
Теперь разработчики смогут удобно генерировать бесконечные последовательности как в синхронном, так и в асинхронном виде.
▶️ https://github.com/dotnet/runtime/pull/116538
👉 @KodBlog
{Async}Enumerable.{Infinite}Sequence
Теперь разработчики смогут удобно генерировать бесконечные последовательности как в синхронном, так и в асинхронном виде.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤2
Устали прыгать между дашбордами, пытаясь понять, почему ваша .NET-приложение ведёт себя странно?
Новый плагин OpenTelemetry для JetBrainsRider приносит все данные наблюдаемости прямо в IDE.
Больше никакого переключения контекста: просто запускайте приложение и следите за логами, метриками и трейсами рядом с кодом
Доступно уже сейчас в Rider 2025.2 EAP5😮
👉 @KodBlog
Новый плагин OpenTelemetry для JetBrainsRider приносит все данные наблюдаемости прямо в IDE.
Больше никакого переключения контекста: просто запускайте приложение и следите за логами, метриками и трейсами рядом с кодом
Доступно уже сейчас в Rider 2025.2 EAP5
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10
В современных сложных программных средах понимание того, что происходит внутри приложения — уже не опция, а необходимость.
Баги любят прятаться в тени и появляются в самый неожиданный момент.
OpenTelemetry проливает свет на происходящее внутри приложения.
Он предоставляет стандартизированный способ сбора и анализа телеметрических данных, обеспечивая прозрачность поведения системы.
OpenTelemetry необходим для мониторинга любого приложения — от распределённых микросервисов до монолитов. Да, даже в монолитной архитектуре вы получите выгоду от использования OpenTelemetry.
У каждого приложения есть внешние зависимости: базы данных, кэши, API, внешние сервисы. Мониторинг этих зависимостей критичен для понимания производительности и взаимодействия приложения с остальной системой.
Сегодня нашёл для вас руководство о том, как внедрить OpenTelemetry для получения ценных данных о производительности и состоянии системы.😊
Вы узнаете:
> Что такое OpenTelemetry и зачем он нужен
> Что такое логи, метрики и трейсы
> Как подключить OpenTelemetry к своему проекту
> Как просматривать данные OpenTelemetry в Jaeger
> Как просматривать данные OpenTelemetry в Seq
> Как добавлять кастомную инструментализацию и свойства в OpenTelemetry
👉 @KodBlog
Баги любят прятаться в тени и появляются в самый неожиданный момент.
OpenTelemetry проливает свет на происходящее внутри приложения.
Он предоставляет стандартизированный способ сбора и анализа телеметрических данных, обеспечивая прозрачность поведения системы.
OpenTelemetry необходим для мониторинга любого приложения — от распределённых микросервисов до монолитов. Да, даже в монолитной архитектуре вы получите выгоду от использования OpenTelemetry.
У каждого приложения есть внешние зависимости: базы данных, кэши, API, внешние сервисы. Мониторинг этих зависимостей критичен для понимания производительности и взаимодействия приложения с остальной системой.
Сегодня нашёл для вас руководство о том, как внедрить OpenTelemetry для получения ценных данных о производительности и состоянии системы.
Вы узнаете:
> Что такое OpenTelemetry и зачем он нужен
> Что такое логи, метрики и трейсы
> Как подключить OpenTelemetry к своему проекту
> Как просматривать данные OpenTelemetry в Jaeger
> Как просматривать данные OpenTelemetry в Seq
> Как добавлять кастомную инструментализацию и свойства в OpenTelemetry
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍3
Каждый проект, над которым я работал, использовал методы-расширения.
До недавнего времени в C# был только один способ их создавать.
С выходом C# 14 появились extension members.
Эта возможность позволяет добавлять методы и поля к уже существующим типам без необходимости:
> создавать производные типы
> перекомпилировать исходный код
> модифицировать оригинальный тип
Как это реализовать в коде:
> Определите контейнер расширений — участки кода внутри static-классов, которые добавляют новые члены к существующим типам
> Размещайте код расширений внутри этих контейнеров
Важно понимать: extension members не нарушают принцип инкапсуляции — они подчиняются тем же правилам доступа, что и исходный тип.
Если вы планируете использовать их, учтите:
🔸 Метод-расширение не будет вызван, если у типа уже есть метод с такой же сигнатурой
🔸 Методы-расширения подключаются на уровне пространства имён (namespace)
👉 @KodBlog
До недавнего времени в C# был только один способ их создавать.
С выходом C# 14 появились extension members.
Эта возможность позволяет добавлять методы и поля к уже существующим типам без необходимости:
> создавать производные типы
> перекомпилировать исходный код
> модифицировать оригинальный тип
Как это реализовать в коде:
> Определите контейнер расширений — участки кода внутри static-классов, которые добавляют новые члены к существующим типам
> Размещайте код расширений внутри этих контейнеров
Важно понимать: extension members не нарушают принцип инкапсуляции — они подчиняются тем же правилам доступа, что и исходный тип.
Если вы планируете использовать их, учтите:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9❤6😐3
5 NuGet-пакетов для EF Core, о которых ты, скорее всего, не знал
Вот 5 пакетов, которые могут мгновенно прокачать твой проект на EF Core:
1️⃣ EntityFramework.Exceptions
↳ Упрощает обработку ошибок, выбрасывая исключения, специфичные для конкретной БД
— https://github.com/Giorgi/EntityFramework.Exceptions
2️⃣ EFCore.NamingConventions
↳ Автоматически приводит имена сущностей и полей к
— https://github.com/efcore/EFCore.NamingConventions
3️⃣ Audit.EntityFramework.Core
↳ Прозрачно отслеживает изменения сущностей для аудита
— https://github.com/thepirat000/Audit.NET
4️⃣ Microsoft.EntityFrameworkCore.DynamicLinq
↳ Позволяет выполнять LINQ-запросы, передавая их как строки во время выполнения
— https://dynamic-linq.net
5️⃣ Z.EntityFramework.Extensions.EFCore
↳ Упрощает bulk-операции: массовые вставки, обновления и удаления работают в разы быстрее
— https://entityframework-extensions.net/
👉 @KodBlog
Вот 5 пакетов, которые могут мгновенно прокачать твой проект на EF Core:
↳ Упрощает обработку ошибок, выбрасывая исключения, специфичные для конкретной БД
— https://github.com/Giorgi/EntityFramework.Exceptions
↳ Автоматически приводит имена сущностей и полей к
snake_case, kebab-case
и другим стилям— https://github.com/efcore/EFCore.NamingConventions
↳ Прозрачно отслеживает изменения сущностей для аудита
— https://github.com/thepirat000/Audit.NET
↳ Позволяет выполнять LINQ-запросы, передавая их как строки во время выполнения
— https://dynamic-linq.net
↳ Упрощает bulk-операции: массовые вставки, обновления и удаления работают в разы быстрее
— https://entityframework-extensions.net/
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍5❤2🐳1
В .NET 10, который выйдет в ноябре этого года, значительно оптимизируют работу с небольшими массивами
Если JIT-компилятор определяет, что массив достаточно мал и не выходит за пределы области видимости метода, он размещает его в стеке, а не в куче. Это означает, что память не аллоцируется в heap, GC не задействуется, а производительность повышается почти в два раза.😊
Например, в .NET 9 массив из 11 элементов занимал 72 байта и выполнялся за 7.7 наносекунды. В .NET 10 те же данные, но 0 байт аллокации и всего 3.9 наносекунды. И самое главное это работает автоматически
👉 @KodBlog
Если JIT-компилятор определяет, что массив достаточно мал и не выходит за пределы области видимости метода, он размещает его в стеке, а не в куче. Это означает, что память не аллоцируется в heap, GC не задействуется, а производительность повышается почти в два раза.
Например, в .NET 9 массив из 11 элементов занимал 72 байта и выполнялся за 7.7 наносекунды. В .NET 10 те же данные, но 0 байт аллокации и всего 3.9 наносекунды. И самое главное это работает автоматически
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥12❤2
Стриминговые API в C# — используй
> Производители используют
> Потребители читают данные через
Зачем нужны стриминговые API?
В отличие от bulk-передачи, стриминг отправляет данные пакетами.
Сколько и когда передавать — зависит от кода, создающего
Параметр
Где особенно полезно:
1. Отправка больших (или даже бесконечных) наборов данных
Пример: поливать сад из шланга вместо таскания вёдер с водой.
Вёдра тяжелее (ресурсоёмко) и требуют ожидания (блокировка).
2. Получение внешних данных — API, IoT-сенсоры, очереди сообщений
Когда нельзя предсказать, когда будет готов следующий элемент —
3. Снижение потребления памяти
Данные проходят потоком и не накапливаются в памяти целиком.
👉 @KodBlog
IAsyncEnumerable
IAsyncEnumerable
оптимизирован для потоковой передачи данных и полностью совместим с async/await.> Производители используют
IAsyncEnumerable<T>
с yield return
> Потребители читают данные через
await foreach
Зачем нужны стриминговые API?
В отличие от bulk-передачи, стриминг отправляет данные пакетами.
Сколько и когда передавать — зависит от кода, создающего
IAsyncEnumerable
.Параметр
T
задаёт тип элемента, который будет возвращаться в потоке.Где особенно полезно:
1. Отправка больших (или даже бесконечных) наборов данных
Пример: поливать сад из шланга вместо таскания вёдер с водой.
Вёдра тяжелее (ресурсоёмко) и требуют ожидания (блокировка).
2. Получение внешних данных — API, IoT-сенсоры, очереди сообщений
Когда нельзя предсказать, когда будет готов следующий элемент —
IAsyncEnumerable
идеально подходит.3. Снижение потребления памяти
Данные проходят потоком и не накапливаются в памяти целиком.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥7❤1
«Сначала фильтруй, потом объединяй» звучит умно. Но это не всегда быстрее.
В SQL порядок написания клауз не определяет порядок выполнения, этим занимается планировщик запросов.
Так что, хотя кажется, что ранняя фильтрация должна уменьшить объём данных перед JOIN — на практике это часто не так.
Планировщик может:
> Самостоятельно оптимизировать стратегии объединения
> Перестраивать порядок операций
> Использовать индексы
Реальный прирост производительности даёт понимание планов выполнения, а не следование «правилам на глазок».
Вот подробный разбор этого популярного мифа про SQL и того, что на самом деле влияет на производительность
👉 @KodBlog
В SQL порядок написания клауз не определяет порядок выполнения, этим занимается планировщик запросов.
Так что, хотя кажется, что ранняя фильтрация должна уменьшить объём данных перед JOIN — на практике это часто не так.
Планировщик может:
> Самостоятельно оптимизировать стратегии объединения
> Перестраивать порядок операций
> Использовать индексы
Реальный прирост производительности даёт понимание планов выполнения, а не следование «правилам на глазок».
Вот подробный разбор этого популярного мифа про SQL и того, что на самом деле влияет на производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍3🔥3
Рекомендуемые расширения для работы с Copilot prompt-файлами:
🔹 File Explorer for Visual Studio — даёт доступ к prompt-файлам прямо внутри Visual Studio.
🔹 Open in Visual Studio Code — позволяет удобно создавать и редактировать prompt-файлы во внешнем редакторе (VS Code)
👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9
Хотите сделать HTTP-запросы в .NET более отказоустойчивыми?
Новая библиотека Microsoft HTTP Resilience предоставляет готовый пайплайн с поддержкой:
> ограничения частоты запросов (rate limiting)
> повторных попыток (retries)
> таймаутов (timeouts)
> предохранителей (circuit breakers)
И всё это настраивается всего одной строкой кода.😐
Разработана в сотрудничестве с Polly, эта версия быстрее и эффективнее по памяти — готова для продакшен-нагрузок.
Вот как начать использовать resilience pipelines в .NET: ссылка
А вы уже используете ретраи или circuit breakers в своих сервисах?
👉 @KodBlog
Новая библиотека Microsoft HTTP Resilience предоставляет готовый пайплайн с поддержкой:
> ограничения частоты запросов (rate limiting)
> повторных попыток (retries)
> таймаутов (timeouts)
> предохранителей (circuit breakers)
И всё это настраивается всего одной строкой кода.
Разработана в сотрудничестве с Polly, эта версия быстрее и эффективнее по памяти — готова для продакшен-нагрузок.
Вот как начать использовать resilience pipelines в .NET: ссылка
А вы уже используете ретраи или circuit breakers в своих сервисах?
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10🎉1
Временные сложности различных структур данных
Big O-нотация описывает, как производительность алгоритма растёт относительно размера входных данных (n). Она используется для оценки эффективности алгоритмов вне зависимости от оборудования или языка программирования.✌️
👉 @KodBlog
Big O-нотация описывает, как производительность алгоритма растёт относительно размера входных данных (n). Она используется для оценки эффективности алгоритмов вне зависимости от оборудования или языка программирования.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3