C# Portal | Программирование
15K subscribers
754 photos
86 videos
19 files
666 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для C#-разработчика

Связь: @devmangx

РКН: https://clck.ru/3FocB6
Download Telegram
В .NET 10 появится {Async}Enumerable.{Infinite}Sequence

Теперь разработчики смогут удобно генерировать бесконечные последовательности как в синхронном, так и в асинхронном виде.

▶️https://github.com/dotnet/runtime/pull/116538

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍112
Устали прыгать между дашбордами, пытаясь понять, почему ваша .NET-приложение ведёт себя странно?

Новый плагин OpenTelemetry для JetBrainsRider приносит все данные наблюдаемости прямо в IDE.

Больше никакого переключения контекста: просто запускайте приложение и следите за логами, метриками и трейсами рядом с кодом

Доступно уже сейчас в Rider 2025.2 EAP5 😮

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
10
В современных сложных программных средах понимание того, что происходит внутри приложения — уже не опция, а необходимость.

Баги любят прятаться в тени и появляются в самый неожиданный момент.

OpenTelemetry проливает свет на происходящее внутри приложения.
Он предоставляет стандартизированный способ сбора и анализа телеметрических данных, обеспечивая прозрачность поведения системы.

OpenTelemetry необходим для мониторинга любого приложения — от распределённых микросервисов до монолитов. Да, даже в монолитной архитектуре вы получите выгоду от использования OpenTelemetry.

У каждого приложения есть внешние зависимости: базы данных, кэши, API, внешние сервисы. Мониторинг этих зависимостей критичен для понимания производительности и взаимодействия приложения с остальной системой.

Сегодня нашёл для вас руководство о том, как внедрить OpenTelemetry для получения ценных данных о производительности и состоянии системы. 😊

Вы узнаете:

> Что такое OpenTelemetry и зачем он нужен
> Что такое логи, метрики и трейсы
> Как подключить OpenTelemetry к своему проекту
> Как просматривать данные OpenTelemetry в Jaeger
> Как просматривать данные OpenTelemetry в Seq
> Как добавлять кастомную инструментализацию и свойства в OpenTelemetry

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍3
Каждый проект, над которым я работал, использовал методы-расширения.

До недавнего времени в C# был только один способ их создавать.

С выходом C# 14 появились extension members.

Эта возможность позволяет добавлять методы и поля к уже существующим типам без необходимости:

> создавать производные типы
> перекомпилировать исходный код
> модифицировать оригинальный тип

Как это реализовать в коде:

> Определите контейнер расширений — участки кода внутри static-классов, которые добавляют новые члены к существующим типам
> Размещайте код расширений внутри этих контейнеров

Важно понимать: extension members не нарушают принцип инкапсуляции — они подчиняются тем же правилам доступа, что и исходный тип.

Если вы планируете использовать их, учтите:

🔸Метод-расширение не будет вызван, если у типа уже есть метод с такой же сигнатурой
🔸Методы-расширения подключаются на уровне пространства имён (namespace)

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥96😐3
Если ты хочешь писать надёжные веб-приложения, важно хорошо понимать, как работают REST API.

И в этом курсе ты разберёшься со всеми основами.

Он охватывает ключевые принципы REST-архитектуры, фреймворк ASP.NET Core, HTTP-методы, интеграцию с базой данных и многое другое. 😎

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥2
5 NuGet-пакетов для EF Core, о которых ты, скорее всего, не знал

Вот 5 пакетов, которые могут мгновенно прокачать твой проект на EF Core:

1️⃣EntityFramework.Exceptions
↳ Упрощает обработку ошибок, выбрасывая исключения, специфичные для конкретной БД
https://github.com/Giorgi/EntityFramework.Exceptions

2️⃣EFCore.NamingConventions
↳ Автоматически приводит имена сущностей и полей к snake_case, kebab-case и другим стилям
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
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍52🐳1
В .NET 10, который выйдет в ноябре этого года, значительно оптимизируют работу с небольшими массивами

Если JIT-компилятор определяет, что массив достаточно мал и не выходит за пределы области видимости метода, он размещает его в стеке, а не в куче. Это означает, что память не аллоцируется в heap, GC не задействуется, а производительность повышается почти в два раза. 😊

Например, в .NET 9 массив из 11 элементов занимал 72 байта и выполнялся за 7.7 наносекунды. В .NET 10 те же данные, но 0 байт аллокации и всего 3.9 наносекунды. И самое главное это работает автоматически

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥122
Стриминговые API в C# — используй IAsyncEnumerable

IAsyncEnumerable оптимизирован для потоковой передачи данных и полностью совместим с async/await.

> Производители используют IAsyncEnumerable<T> с yield return
> Потребители читают данные через await foreach

Зачем нужны стриминговые API?

В отличие от bulk-передачи, стриминг отправляет данные пакетами.

Сколько и когда передавать — зависит от кода, создающего IAsyncEnumerable.
Параметр T задаёт тип элемента, который будет возвращаться в потоке.

Где особенно полезно:

1. Отправка больших (или даже бесконечных) наборов данных

Пример: поливать сад из шланга вместо таскания вёдер с водой.
Вёдра тяжелее (ресурсоёмко) и требуют ожидания (блокировка).

2. Получение внешних данных — API, IoT-сенсоры, очереди сообщений

Когда нельзя предсказать, когда будет готов следующий элемент — IAsyncEnumerable идеально подходит.

3. Снижение потребления памяти

Данные проходят потоком и не накапливаются в памяти целиком.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥71
«Сначала фильтруй, потом объединяй» звучит умно. Но это не всегда быстрее.

В SQL порядок написания клауз не определяет порядок выполнения, этим занимается планировщик запросов.

Так что, хотя кажется, что ранняя фильтрация должна уменьшить объём данных перед JOIN — на практике это часто не так.

Планировщик может:

> Самостоятельно оптимизировать стратегии объединения
> Перестраивать порядок операций
> Использовать индексы

Реальный прирост производительности даёт понимание планов выполнения, а не следование «правилам на глазок».

Вот подробный разбор этого популярного мифа про SQL и того, что на самом деле влияет на производительность

👉 @KodBlog
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
Please open Telegram to view this post
VIEW IN TELEGRAM
10🎉1
Временные сложности различных структур данных

Big O-нотация описывает, как производительность алгоритма растёт относительно размера входных данных (n). Она используется для оценки эффективности алгоритмов вне зависимости от оборудования или языка программирования. ✌️

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73