C# 1001 notes
رفتن به کانال در Telegram
Регулярные короткие заметки по C# и .NET. Просто о сложном для каждого. admin - @haarrp
نمایش بیشتر6 617
مشترکین
+124 ساعت
+537 روز
+4730 روز
آرشیو پست ها
6 619
❓Сталкиваетесь с задачами, когда вам нужно выбрать лучший алгоритм, но не понимаете, как анализировать их сложность? Ваш код может быть медленным или неэффективным, и вы не знаете, как это исправить?
📗На открытом вебинаре 21 апреля в 20:00 мск вы освоите важные инструменты для анализа сложности алгоритмов, улучшите свой навык решения алгоритмических задач и на примере простых алгоритмов сортировки и увидите разницу при применении алгоритмов разной степени сложности.
➡️Регистрируйтесь прямо сейчас и получите скидку на большое обучение «C# Developer» по промокоду SHARP_SPEC_4: https://otus.pw/ph5R/?erid=2W5zFJYeybN
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
6 619
Вы используете локальные переменные в LINQ и используете let? 👇
Ключевое слово let позволяет вводить временную переменную прямо внутри запроса LINQ — как локальную переменную в цикле.
Разбивайте сложные вычисления на части
Делайте запрос модульнее и чище
Меньше проходов по данным → выше производительность
👉 Простой пример:
csharp
from order in orders
let total = order.Items.Sum(i => i.Price * i.Quantity)
where total > 1000
let categories = order.Items.Select(i => i.Category).Distinct()
select new
{
OrderId = order.Id,
Total = total,
Categories = categories
};
let total = … — вычисляем сумму заказа только один раз
where total > 1000 — фильтруем по готовому значению
let categories = … — собираем уникальные категории6 619
Улучшения API OrderedDictionary: новые перегрузки для TryAdd и TryGetValue возвращают позиции индексов для эффективного доступа.
Обновление генерации исходного кода JSON: атрибут JsonSourceGenerationOptionsAttribute теперь поддерживает ReferenceHandler для расширенного управления сериализацией.
Для получения более подробной информации сюда
6 619
В третьем предварительном выпуске .NET 10 Preview 3, Microsoft сосредоточила внимание на улучшении производительности, удобстве для разработчиков и современных облачных паттернах.
Хотя этот выпуск не содержит значимых новых функций, он предлагает значительные усовершенствования в различных областях.
🔧 Основные нововведения
🐳 Нативная публикация контейнеров для консольных приложений
Теперь консольные приложения могут создавать контейнерные образы с помощью команды:
dotnet publish /t:PublishContainer
Это стало возможным без необходимости устанавливать свойство <EnableSdkContainerSupport> в значение true в файле проекта. Если требуется отключить эту поддержку, можно установить это свойство в false.
📦 Управление форматом контейнерных образов
Разработчики получили возможность явно указывать формат контейнерного образа (.Docker или .OCI) с помощью нового свойства <ContainerImageFormat> в SDK. По умолчанию SDK выбирает формат на основе архитектуры контейнера и базового образа, но теперь это поведение можно переопределить, что особенно полезно для команд, стандартизирующихся на формате OCI.
🌐 Обновления для облачных и веб-приложений
ASP.NET Core: Добавлена поддержка OpenAPI 3.1, что обеспечивает лучшую интеграцию с современными API-шлюзами и инструментами проектирования. Также теперь можно обслуживать документы OpenAPI в формате YAML, что широко используется в инфраструктуре как код и DevOps-процессах.
Blazor Web Apps: Введён новый компонент ReconnectModal для более плавной обработки отключений клиента. Улучшения также коснулись компонента QuickGrid, включая условное стилизование строк и управление пользовательским интерфейсом. Навигация стала более предсказуемой, избегая ненужной прокрутки страниц и лучше обрабатывая строки запроса. Кроме того, скрипт фреймворка Blazor теперь обслуживается как статический веб-ресурс с отпечатком, улучшая кэширование и производительность, особенно в средах с CDN или на периферии сети.
⚙️ Дополнительные улучшения
Оптимизация SDK: Автоматическое удаление неиспользуемых ссылок на пакеты, предоставляемые фреймворком, что снижает использование диска и улучшает производительность сборки.
- Улучшения CLI:
Введены новые алиасы команд, такие как dotnet package add, для повышения ясности и согласованности командной строки.
Теперь можно генерировать скрипты автодополнения оболочки с помощью команды dotnet completions generate <SHELL> для bash, zsh, powershell и других.
В интерактивных терминалах команды CLI теперь по умолчанию работают в интерактивном режиме, упрощая взаимодействие с пользователем.
- Улучшения JIT-компилятора:
Возможность деинлайнить и инлайнить методы интерфейса на массивах, улучшая производительность в коде с интенсивным использованием коллекций.
Оптимизация перечисления массивов, позволяющая лучшую инлайнизацию JIT и размещение в стеке.
Поддержка инлайнинга методов, которые становятся деинлайненными после предыдущих шагов инлайнинга.
Разрешение размещения в стеке для небольших массивов фиксированного размера, состоящих из типов значений без указателей GC, снижая нагрузку на кучу.
- Новые API и улучшения:
Поддержка поиска сертификатов по отпечатку с использованием алгоритмов, отличных от SHA-1, таких как SHA-256.
Улучшения в кодировании PEM: API PEM теперь поддерживают чтение ASCII/UTF-8 текста напрямую, упрощая кроссплатформенную работу с ключами и сертификатами.
Поддержка DateOnly в ISOWeek: новые перегрузки для работы со значениями DateOnly в логике, основанной на неделях.
Нормализация строк для Span<char> и ReadOnlySpan<char>: новые API позволяют выполнять нормализацию Unicode напрямую на этих типах, снижая количество выделений памяти.
Для получения более подробной информации сюда6 619
.NET митап в Нижнем Новгороде + трансляция
Когда: 21 апреля, 19:00 (мск)
Офлайн: КУПНО, регистрация обязательна, число мест ограничено
Онлайн: VK и Youtube, зарегистрируйтесь, чтобы получить ссылки на просмотр/запись.
В программе доклады:
• О построении распределенных систем и паттерне outbox от Андрея Цветцих (Т-Банк),
• О расчете вероятности любого события инструментами .NET от Кирилла Панина (Altenar),
• О миграции данных с MS SQL на Postgres SQL от Дмитрия Ершова (Рексофт).
6 619
🔧 Задача на C# для внимательных разработчиков
Что выведет следующий код?
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var actions = new List<Action>();
for (int i = 0; i < 3; i++)
{
actions.Add(() => Console.WriteLine(i));
}
foreach (var action in actions)
action();
}
}
Варианты ответа:
A)
1
2
B)
3
3
C)
0
0
D)
---
✅ Правильный ответ: B
Почему:
Лямбда-функции захватывают переменную i по ссылке, а не её значение на каждой итерации. После завершения цикла i == 3, и все замыкания ссылаются на одно и то же i. Это классическая ловушка замыканий в C#.6 619
🛡Хотите строить защищенные и масштабируемые микросервисы с помощью ASP.NET Core?
Присоединяйтесь к открытому уроку 17 апреля в 20:00 МСК и узнайте, как создать безопасные микросервисы с использованием JWT, OpenID Connect, и .NET Aspire. Мы разберем, как защитить API, оптимизировать производительность и внедрить современные подходы к аутентификации и авторизации.
❗️Что разберем:
- Принципы и преимущества архитектуры микросервисов.
- Защиту API с использованием JWT и OpenID Connect.
- Инструменты .NET Aspire для оркестрации сервисов и настройки окружения.
- Реальные шаги по созданию микросервисов, настройке безопасности и работе с Docker.
🚀 Урок пройдет в преддверии старта курса «C# ASP.NET Core разработчик».
🎁 Все участники получат скидку на обучение по промокоду: ASP_NET_04.
Присоединяйтесь: https://otus.pw/M71Fp/?erid=2W5zFJ19jdJ
Промокод действителен до 28.04.2025
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
6 619
⚡️ .NET: валидация Minimal API
В .NET 8 Preview 3 появилась встроенная поддержка валидации для Minimal API — теперь можно использовать атрибуты Required, Range, StringLength и другие прямо в минималистичных контроллерах без лишнего кода.
⚙️ Microsoft добавила официальный пример:
🔗 github.com/captainsafia/minapi-validation-support
🧪 В проекте показано:
- как включить AddValidation() в Program.cs
- как использовать
[ValidatableType] для ваших моделей
- как обрабатывать ошибки валидации автоматически
🚀 Чтобы запустить пример:
cd api
dotnet run
✍️ Минимализм + строгая валидация = 🔥 для API!
📌 Github
@csharp_1001_notes6 619
🛠 Patroni + PostgreSQL: как обеспечить высокую доступность?
Когда база данных — это сердце системы, её отказ может стоить дорого. Как сделать PostgreSQL отказоустойчивым и управляемым? Решение есть — Patroni!
📅 14 апреля в 20:00 (мск)
🎓 Открытый вебинар с Сергеем Кирьяковым
💡 Что разберём?
✅ Как работает Patroni и зачем он нужен для PostgreSQL
✅ Основные компоненты и архитектуру Patroni
✅ Как правильно настроить и конфигурировать Patroni
✅ Практические примеры управления кластером PostgreSQL
✅ Оптимизация, мониторинг и лучшие практики работы
🎯 Что получите?
✔️ Понимание работы Patroni и его роли в HA-кластерах PostgreSQL
✔️ Готовые практические решения по настройке и оптимизации
✔️ Навыки мониторинга и управления отказоустойчивыми базами
Присоединяйтесь и узнайте, как обеспечить PostgreSQL надёжностью!
👉 Регистрируйтесь по ссылке: https://otus.pw/0sSi5/?erid=2W5zFJSpPZa
Бесплатное занятие приурочено к старту курса Highload Architect, обучение на котором позволит освоить решения, которые выдерживают большое количество запросов в секунду и правильно оптимизировать работоспособность серверов.
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
6 619
🔥 Awesome на GitHub
Это курируемые подборки ресурсов (книг, статей, инструментов, библиотек и многое другое) по конкретным темам, созданные сообществом разработчиков и энтузиастов.
Собрали подборку лучших из них. Сохраняйте, чтобы не потерять
• C: awesome-c
• C++: awesome-cpp
• C#: awesome-dotnet
• Хакинг: https://github.com/Hack-with-Github/Awesome-Hacking
• Информационная безопасность: awesome-security
• Базы данных: awesome-database-learning
• JavaScript: awesome-javascript
• React: awesome-react
• Vue: awesome-vue
• Angular: awesome-angular
• Node.js: awesome-nodes
• Typescript: awesome-typescript
• Java: awesome-java
• Go: awesome-go
• Ruby: awesome-ruby
• PHP: awesome-php
• Kotlin: awesome-kotlin
• Rust: awesome-rust
• Swift: awesome-swift
• iOS-разработка: awesome-ios
• Android-разработка: awesome-android
• Unreal Engine: awesome-unreal
• Unity: awesome-unity3d
• Python: awesome-python
• Django: awesome-django
• Data Science: awesome-datascience
• TensorFlow: awesome-tensorflow
• Linux: Awesome-Linux-Software
• DevOps: awesome-devops
• SysAdmins: awesome-sysadmin
• Nginx: awesome-nginx
• Kubernetes: awesome-kubernetes
• Docker: awesome-docker
• Автоматизация сетевой инфраструктуры: awesome-network-automation
• QA: awesome-testing
@cpluscsharp
6 619
Transaction Outbox: как избежать потери данных в распределённых системах
В распределённых системах потеря данных — это не редкость. Как гарантировать целостность информации и обеспечить надёжную передачу сообщений? Transaction Outbox — шаблон, который решает проблему согласованности данных.
📅 7 апреля в 20:00 (мск)
🎓 Открытый вебинар с Олегом Мифле
💡 Что разберём?
✅ Проблемы согласованности данных в распределённых системах
✅ Как работает Transaction Outbox
✅ Как связать локальные базы данных с брокерами сообщений (Kafka, RabbitMQ)
✅ Реальные примеры внедрения шаблона в микросервисную архитектуру
🎯 Что получите?
✔️ Понимание принципов согласованности данных в распределённых системах
✔️ Практические навыки работы с Transaction Outbox
✔️ Готовые решения для построения надёжной микросервисной архитектуры
👉 Регистрация: https://otus.pw/N3xZ/?erid=2W5zFGkyYSk
Занятие приурочено к старту курса Highload Architect, обучение на котором позволит освоить решения, которые выдерживают большое количество запросов в секунду и правильно оптимизировать работоспособность серверов.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
6 619
✔️ Визуализация алгоритмов сортировки
Интерактивный инструмент, который поможет разобраться в работе ключевых алгоритмов сортировки.
Возможности:
— сортирует массив трёхзначных чисел;
— регулирует скорость;
— запускает, останавливает, сбрасывает процесс;
— создаёт случайный массив.
🔗 GitHub
@csharp_1001_notes
6 619
💻Хотите быстро научиться строить интерактивные интерфейсы на C#?
Присоединяйтесь к открытому уроку 8 апреля в 20:00 мск, где мы покажем, как сделать ваш код живым и динамичным!
📖Вы научитесь использовать класс System.Console для создания простых, но интересных программ с текстовыми интерфейсами. Например, вы напишете свою версию игры "Крестики-нолики" прямо в консоли. Это легко и увлекательно!
🔥С этим знанием вы сможете не просто выводить данные, а создавать интерактивные приложения, которые смогут реагировать на действия пользователя.
➡️ Зарегистрируйтесь на вебинар и получите скидку по промокоду SHARP_SPEC_4 на большое обучение «C# Developer»: https://otus.pw/Lh8D/?erid=2W5zFJHnQcp
Промокод действителен до 30.04.2025
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
6 619
Repost from C# (C Sharp) programming
🔥 Claude теперь интегрирован в Unity, Blender и Unreal Engine — MCP-плагины остаются в центре внимания! Теперь для создания игры достаточно лишь клавиатуры.
• Claude в Unity— генерирует геймплейные механики (физику, цели, таймеры), окружение, эффекты, интерфейсы, миникарты и многое другое.
• Claude в Blender — мгновенно создаёт 3D-модели и сцены, превращает фотографии в игровые локации и редактирует их по вашим командам.
• Claude в Unreal Engine — создаёт объекты, задаёт им форму и разрабатывает их логику всего за несколько минут.
Сохраняйте и пробуйте в деле! 🚀
6 619
☸️Хотите узнать, как деплоить ASP.NET-приложения в Kubernetes?
📅26 марта в 20:00 мск на открытом вебинаре мы разберем:
– PersistentVolume
– ConfigMap
– Secret
– Развернем БД в кластере и обсудим, почему секреты не такие уж секретные.
С Kubernetes ваши ASP.NET Core-приложения станут масштабируемыми и гибкими.
➡️ Регистрируйтесь на вебинар и получите скидку на курс «C# ASP.NET Core-разработчик»: https://otus.pw/0EoO/?erid=2W5zFHAfL96
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
6 619
В этом блоге рассказывает о новой функции Visual Studio, которая автоматически генерирует комментарии документации с помощью GitHub Copilot. Главные моменты:
▪ При вводе три слэшей (например, «///») редактор предлагает готовые комментарии, которые включают краткое описание функции, её параметры и возвращаемое значение.
▪ Функция доступна в Visual Studio 17.14 Preview 2 для проектов на C# и C++, с возможностью настройки стилей комментариев (XML или Doxygen для C++).
▪ Для использования требуется подписка на GitHub Copilot.
▪ Microsoft призывает разработчиков тестировать нововведение и оставлять обратную связь для дальнейшего улучшения инструмента.
Эта функция существенно упрощает процесс документирования кода и повышает продуктивность работы разработчиков.
Читать
6 619
❓Хотите стать C#-разработчиком, но боитесь, что будет сложно?
Подготовьтесь заранее и освойте Git — ключевой инструмент командной разработки!
На открытом вебинаре 31 марта в 20:00 мск разберем:
◽️ Систему контроля версий
◽️ Основные команды
◽️ Принципы работы с репозиториями
◽️ Эти знания помогут вам уверенно работать в команде и подготовиться к следующему этапу.
С Git вы сможете эффективно управлять кодом, вести проекты и двигаться к позиции Junior и Middle.
🔗 Регистрируйтесь на вебинар и 🎁 получите скидку на большое обучение «C# Developer»: https://otus.pw/RCqW/?erid=2W5zFG81u9J
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
6 619
🎯 NVIDIA k8s-device-plugin
Этот репозиторий содержит NVIDIA Device Plugin для Kubernetes. Он позволяет автоматически обнаруживать и предоставлять GPU-ресурсы NVIDIA в кластере Kubernetes.
📌 Поддерживаемые функции:
- Автоматическое обнаружение GPU
- Выделение GPU для контейнеров
- Поддержка Multi-Instance GPU (MIG)
- Интеграция с nvidia-container-toolkit
- Гибкая настройка через параметры и конфигурации
Установка плагина осуществляется через манифесты, доступные в папке deployments/. Проект активно развивается и поддерживается NVIDIA.
Полезен, если вы работаете с ML/AI-ворклоудами в Kubernetes и хотите использовать ресурсы GPU эффективно и прозрачно.
https://github.com/NVIDIA/k8s-device-plugin
