Библиотека шарписта | C#, F#, .NET, ASP.NET
22.7K subscribers
2.35K photos
38 videos
85 files
4.52K links
Все самое полезное для C#-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/b60af5a4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
🔒 Оптимистическая vs пессимистическая блокировка

Каждый .NET разработчик рано или поздно сталкивается с этим: два запроса одновременно обновляют одну сущность в Entity Framework, и один из них молча затирает изменения другого. Классическая проблема многопоточных приложений, которая превращает стабильный код в источник багов.

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

В статье разбираемся как это сделать с помощью двух типов блокировок.

➡️ Читать статью

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍87
💬 Full-Stack или глубокая специализация

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

Сейчас не редкость, что на рынок труда выходят кандидаты, которые могут работать с абсолютно всем — от фронтенда до бэкенда, от баз данных до DevOps. В некоторых случаях это выглядит как «швейцарские ножи», которые знают всё, но ни в чём не являются экспертами.

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

💬 Как думаете вы? Лучше углубиться в одну область или быть «швейцарским ножом»?


🐸Библиотека шарписта

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
📰 Недельный дайджест

Собрали для вас материалы второй недели осени.

Сентябрьские обновления .NET

Microsoft выпустили обновления для .NET 8.0 и .NET 9.0. Эти обновления содержат исправления, не связанные с безопасностью, и направлены на улучшение стабильности и качества платформы.

Улучшения производительности в .NET 10

В .NET 10 значительные улучшения производительности были достигнуты благодаря оптимизациям в Just-In-Time (JIT) компиляторе. Также улучшена деабстракция, позволяющая интерфейсам и делегатам работать быстрее, а виртуальные вызовы — эффективно инлайнироваться.

5 трендов IT-найма 2025

Первый кандидат к релизу .NET 10

Visual Studio 2026 Insiders уже доступна

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Библиотечный метод возвращает ValueTask<T> (часто завершается синхронно). В вызывающем коде результат нужно ждать несколько раз и/или комбинировать с другими задачами через Task.WhenAll. Что делать правильно?

👾 — ValueTask<T> можно await-ить сколько угодно раз — как Task<T>
👍 — Сконвертировать в Task<T> через .AsTask() и уже его ждать/комбинировать
🥰 — Обернуть в Task.Run(...), чтобы получить полноценную Task
⚡️ — Никогда не возвращать ValueTask<T> из публичных API — всегда только Task<T>

Библиотека задач по C#
👍565
💎 Вспоминаем SOLID

SOLID — это 5 принципов объектно-ориентированного проектирования. Давайте повторим эту базу.

Single Responsibility Principle (Принцип единственной ответственности)

Каждый класс должен иметь только одну причину для изменения.

Плохо: класс UserManager и сохраняет пользователя в БД, и отправляет email.
Хорошо: UserRepository хранит, EmailService отправляет письма.

Open/Closed Principle (Принцип открытости/закрытости)

Классы должны быть открыты для расширения, но закрыты для изменения.

Новый функционал добавляем через расширение, а не переписывание старого кода.

Пример: вместо переписывания метода — создаём новый подкласс или внедряем стратегию.

Liskov Substitution Principle (Принцип подстановки Барбары Лисков)

Объекты подклассов должны работать так же, как объекты родителя.

Если Square наследуется от Rectangle, он должен вести себя как прямоугольник, а не ломать ожидания.

Суть: наследование не должно рушить логику программы.

— Interface Segregation Principle (Принцип разделения интерфейсов)

Лучше много маленьких интерфейсов, чем один огромный.

Плохо: интерфейс IMachine с методами print(), scan(), fax().
Хорошо: IPrinter, IScanner, IFax. Каждый класс реализует только нужное.

— Dependency Inversion Principle (Принцип инверсии зависимостей)

Зависимости должны быть от абстракций, а не от конкретных классов.

Плохо: класс ReportGenerator напрямую вызывает MySQLDatabase.
Хорошо: ReportGenerator работает с интерфейсом Database, а уже конкретная БД подставляется снаружи.

Без SOLID код быстро превращается в спагетти, где одно изменение ломает всё.

💬 Пишите в комменты как вы объясняете, что такое SOLID

🐸Библиотека шарписта

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥4🥱31😁1
🧩 Оптимизация кода с помощью Application Insights

В .NET теперь проще выявлять узкие места и оптимизировать производительность приложений благодаря обновлениям в Application Insights. Инструмент собирает данные о работе кода в реальном времени, помогает находить медленные участки, лишние аллокации и повторяющиеся операции.

➡️ Блог разработчиков

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🧗 Кто такие Unit-лид и Technical Owner

Классическая связка «тимлид + продакт-менеджер» не справляется с ростом команд до 50-100+ человек и усложнением продуктов. На смену приходят роли, ориентированные на продуктовое мышление вместо простого исполнения задач.

Unit-лид функционирует как мини-CEO продуктового направления: управляет стратегией, а technical owner служит мостом между бизнесом и техникой.

Главное отличие от прошлого: специалисты не просто выполняют поставленные задачи, а понимают продукт целиком.

➡️ Подробнее про обе роли

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👨‍💻 Как ускорить запуск .NET приложения

1️⃣ Сначала измерьте

Включите EventPipe/PerfView/dotnet-trace для старта: какие сборки грузятся, на что тратится время.

Снимите таймлайны: «вход в Main → готовность endpoint'ов / UI».

Измеряйте Release-сборку, без отладчиков и без «горячих» кэшей.

2️⃣ Оптимизации сборки

• ReadyToRun (R2R)
Компилирует IL в машинный код при публикации:
<!-- Directory.Build.props или csproj -->
<PropertyGroup>
<PublishReadyToRun>true</PublishReadyToRun>
<PublishTrimmed>true</PublishTrimmed>
<TrimMode>partial</TrimMode> <!-- для библиотек и DI -->
</PropertyGroup>


• PGO (Profile-Guided Optimization) + R2R
Соберите профиль и примените при crossgen2 (даёт лучший порядок/инлайнинг для «горячего» пути старта).

• NativeAOT
Полностью нативный бинарь, почти мгновенный старт. Подходит для CLI/служб с ограниченным набором фич и для «узких» сервисов или edge-эндпоинтов в вебе.

3️⃣ Минимизация загрузки и работы на старте

Уберите всё, что не нужно при старте: тяжёлые клиенты (БД, кеши, внешние SDK) создавайте лениво, после поднятия хостинга.

Прогружайте конфигурацию минимально: уберите лишние провайдеры, большие JSON-файлы, многократные AddJsonFile.

Логи на старте — только консоль/минимальный уровень, позже можно расширить.

Уберите неиспользуемые пакеты, объедините внутренние пакеты, избегайте древовидных зависимостей ради одной функции.

Встроенный контейнер быстрый, но следите за графом:

• Регайте Singleton/Scoped только когда нужно.
• Избегайте «сервисов-глобов» с большим конструктором на десятки зависимостей.
• Используйте фабрики/Lazy для тяжёлых зависимостей.

4️⃣ ASP.NET Core: быстрый подъём хоста

Минимальный хостинг и только нужные middleware:
var builder = WebApplication.CreateBuilder(args);
// Оставьте только то, что нужно для старта
builder.Services.AddRouting();
var app = builder.Build();
// Критичный middleware – ближе к началу конвейера
app.MapGet("/healthz", () => "OK");
app.Run();


Отключите всё, что делает работу на старте: избыточная авто-дискавери Swagger, отражение в валидации, сканирование сборок.

5️⃣ Инициализация после старта

Разнесите готовность принимать трафик и полную готовность всех подсистем:

• Быстрый /healthz сразу.
• Прогрев кэшей/метаданных — в фоне IHostedService с низким приоритетом.
• В оркестраторе задайте readinessProbe после минимального старта, а «тяжёлый прогрев» делайте уже на фоне.

6️⃣ Тримминг: аккуратно, но даёт эффект

PublishTrimmed=true + TrimMode=partial часто снижает размер и ускоряет загрузку.

Обязательно добавляйте DynamicDependency/UnconditionalSuppressMessage/RD.XML для сохранения типов, которые нужны через рефлексию (DI/JSON/ORM).

💬 А у вас сколько секунд уходит на холодный старт .NET сервиса?

🐸Библиотека шарписта

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍142🔥2❤‍🔥1
👨‍💻 Ленивая генерация DTO

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

Промпт для генерации DTO:
Сгенерируй DTO класс на C# с публичными свойствами для объекта, содержащего следующие поля: {подставить полный список свойств}. Класс должен иметь комментарии для каждого свойства, описывающие его назначение. Используй стандартные соглашения оформления C# для именования классов и свойств.


🐸Библиотека шарписта

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚10😁7🥱3🙏2
This media is not supported in your browser
VIEW IN TELEGRAM
📅 24 сентября в 19:00 МСК — бесплатный вебинар с Максимом Шаланкиным.

Тема: «ИИ-агенты: новая фаза развития искусственного интеллекта».

🔹 Почему все говорят про ИИ-агентов и куда вливаются миллиарды инвестиций.
🔹 Чем они отличаются от ChatGPT и обычных ботов.
🔹 Как работает цикл агента: восприятие → планирование → действие → обучение.
🔹 Живое демо простого агента.
🔹 Потенциал для бизнеса: автоматизация процессов и ROI до 80%.

Не придёшь — будешь потом рассказывать, что «агенты — это как чат-боты», и ловить косые взгляды от коллег 😏

👉 Регистрируйтесь через форму на лендинге
😢2
📊 Почему сайты тормозят: фронтенд ли

Сегодня большинство сайтов загружаются 3–5 секунд. Для пользователя это уже привычно, но для бизнеса — потерянные клиенты и деньги. И дело не только во фронтенде: корень проблемы иногда глубже — в бэкенде.

Что влияет на скорость ответа:

• неоптимизированные запросы к базе
• тяжёлые API-эндпоинты
• отсутствие кэша или его неправильная реализация
• перегрузка серверов и медленные очереди

Фронтенд может ужать картинки и ускорить отрисовку, но если бэкенд думает по 2 секунды на запрос — сайт всё равно будет тормозить.

💬 Как вы относитесь к этой проблеме и что делаете в своих проектах, чтобы бэкенд не становился узким местом?

🐸Библиотека шарписта

#entry_point
Please open Telegram to view this post
VIEW IN TELEGRAM
7
🔄 Поддержка релизов .NET STS теперь 24 месяца

Microsoft увеличивает срок поддержки релизов .NET с типом Short Term Support с 18 до 24 месяцев. Это означает, что .NET 9, выпущенный 12 ноября 2024 года, будет поддерживаться до 10 ноября 2026 года — на 6 месяцев дольше, чем планировалось ранее.

LTS-релизы сохраняют прежнюю политику: поддержка в течение 36 месяцев или 12 месяцев после выпуска следующего релиза.

➡️ Блог разработчиков

🐸Библиотека шарписта

#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
👍113🔥1
⚡️ Бесплатный вебинар — ИИ-агенты: новая фаза развития AI

24 сентября в 19:00 МСК состоится бесплатный вебинар с Максимом Шаланкиным — Data Science Team Lead в финтех-команде MWS, а познакомиться с ним ближе можно в его тг-канале.

Тема:
«ИИ-агенты: новая фаза развития искусственного интеллекта».


На вебинаре разберёмся, почему агенты — это следующий шаг после ChatGPT, чем они отличаются от обычных моделей и как уже приносят бизнесу ROI до 80%. А дальше я покажу, как эта тема ложится в наш курс по ИИ-агентам, который разработан под руководством Никиты Зелинского.

Подробности рассказываем в гс выше — включай, чтобы не пропустить.
😊 Как сделать GitHub Copilot умнее

GitHub Copilot теперь можно настроить с помощью Instruction Files и Prompt Files, чтобы AI генерировал код в соответствии с вашими стандартами и требованиями проекта.

Файлы с инструкциями задают общие правила для репозитория: стиль кода, соглашения по именам, обязательные тесты, ограничения на изменения и инструкции по CI/CD.

Их удобно использовать для командной работы и open-source-проектов, чтобы все предложения Copilot соответствовали принятым стандартам.

➡️ Раскочегарить Copilot

🐸Библиотека шарписта

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🦸 Wolverine 5.0: релиз 1 октября

В новой версии будет реализована поддержка Redis как транспортного механизма для сообщений, улучшена совместимость с различными хранилищами сообщений и проведена работа над Dead Letter Queue в рамках проекта CritterWatch.

После релиза Wolverine 5.0 проект CritterWatch станет основным техническим фокусом Джереми Миллера и JasperFx на оставшуюся часть года.

➡️ Блог разработчика

🐸Библиотека шарписта

#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥3🥰1
⚙️ Разбор .NET rc1

Недавно мы делились новостью о выходе .NET 10 RC1. Теперь пришло время посмотреть глубже: что именно изменилось, какие улучшения можно опробовать уже сейчас.

Повышение производительности без усилий

• Улучшения в рантайме и JIT-компиляторе, благодаря которым уже существующий код работает быстрее при перекомпиляции, без изменения кода.

• «Deabstraction»: устранение накладных расходов за счёт оптимизации интерфейсов, лямбд, async, итераторов и др.

• Расширенный «escape analysis», позволяющее небольшие объекты размещать в стеке, а не на куче, что уменьшает нагрузку на garbage collector.

Улучшения рантайма и GC

• Поддержка AVX 10.2 инструкций — подготавливает платформу к современному железу.

• Оптимизация фонового GC, улучшение сжатия памяти и управления фрагментацией.

Безопасность и квантовая устойчивость

• Внедрение апи для пост-квантовой криптографии.

• Новый алгоритм цифровой подписи ML-DSA (основанный на решёточных структурах), стандартизированный NIST.

Новые возможности для разработчиков и приложений

ASP.NET Core: более детальная телеметрия/метрики по аутентификации, токенам и двухфакторке, что облегчает выявление атак типа «credential stuffing», брут форс и др.

• EF Core: поддержка векторного поиска и нативного JSON в SQL Server — полезно для AI и полуструктурированных данных.

• .NET MAUI: метрики на уровне UI-layout операций (Measure, Arrange) — помогает обнаружить ботлнеки интерфейса.

C# 14 — язык становится дружелюбнее и эффективнее

• Возможность использовать params не только с массивами, но и со Span для уменьшения аллокаций.

• Новый field-контекст в свойствах упрощает код, убирает явное объявление «backing field» — меньше шаблонов, меньше шума.

Язык и среда .NET движутся в сторону объединения удобства и производительности: абстракции остаются, но их накладные расходы всё больше уходят.

🐸Библиотека шарписта

#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2362🥰1