Заметки ленивого .NET-чика
3 subscribers
39 photos
7 videos
43 links
Полезные советы и фишки программирования
Download Telegram
Forwarded from C# 1001 notes
🧰 .NET Community Toolkit — полезная коллекция библиотек и API для .NET-разработчиков, созданная Microsoft и поддерживаемая сообществом. Этот набор инструментов не привязан к конкретному UI-фреймворку, а значит, его можно использовать в любых проектах — от десктопных приложений до веб-решений.

Среди ключевых компонентов — CommunityToolkit.Mvvm (облегченная MVVM-библиотека, наследник MvvmLight), CommunityToolkit.HighPerformance (оптимизации для работы с памятью и многопоточностью) и CommunityToolkit.Diagnostics (удобные методы валидации). При этом все инструменты уже применяются в реальных продуктах Microsoft, включая новый Microsoft Store.

Разработчики могут легко подключить NuGet-пакеты через Visual Studio, а документация доступна на Microsoft Docs. Планы по развитию публикуются в Roadmap, а для тестирования новых функций можно подключить пререлизные сборки.

🤖 GitHub
Forwarded from C# 1001 notes
🔥 Лучшая фича в ASP .NET Core 10 — Server-Sent Events (SSE)

SSE — это упрощённая альтернатива SignalR: стриминг данных с сервера к клиенту через обычный HTTP.

🔑 Плюсы SSE:
➡️ Односторонняя передача: только сервер → клиент
➡️ Работает через обычный HTTP (тип `text/event-stream`)
➡️ Не требует WebSocket-рукопожатия
➡️ Браузеры автоматически переподключаются
➡️ Очень низкие накладные расходы

🧪 Можно тестировать прямо через curl, Postman, Apidog, или HTTP request-файлы в IDE. Поддерживается во всех основных браузерах.

📌 Когда использовать SSE:
☑️ Лайв-ленты: акции, спорт, новости
☑️ Реальные уведомления: соцсети, алерты
☑️ Отслеживание прогресса: загрузки, долгие операции
☑️ Лайв-дэшборды: мониторинг, аналитика

SSE идеально подходит, когда нужно пушить данные с сервера, но не нужен full-duplex как в WebSockets.

📦 Я сделал пример — Live Stock Market с исходниками для фронта и бэка. Пиши, если интересно!
Forwarded from C# 1001 notes
🔍 Anton DevTips делится 650+ эксклюзивными бесплатными материалами для прокачки C#, .NET, ASP .NET Core, EF Core и микросервисов:

Отдельные статьи и примеры из подборки:

- Structured Logging & Distributed Tracing в микросервисах
https://antondevtips.com/blog/how-to-implement-structured-logging-and-distributed-tracing-for-microservices-with-seq
- Server-Sent Events в ASP .NET Core 10
https://antondevtips.com/blog/real-time-server-sent-events-in-asp-net-core
- Логирование API-запросов и ответов
https://antondevtips.com/blog/logging-requests-and-responses-for-api-requests-and-httpclient-in-aspnetcore
- GraphQL c HotChocolate
https://antondevtips.com/blog/getting-started-with-hot-chocolate-graphql
- WebAPI на FastEndpoints + Vertical Slice
https://antondevtips.com/blog/productive-web-api-development-with-fast-endpoints-and-vertical-slice-architecture-in-dotnet
- AI-чат-бот на OpenAI + Postgres
https://antondevtips.com/blog/building-multimodel-ai-chat-bot-in-dotnet-with-chat-gpt-and-database-branching-in-neon-postgres
- Мультитенант в Azure Functions
https://antondevtips.com/blog/building-a-multitenant-cloud-application-with-azure-functions-and-neon-postgres
- Snapshot-тестирование с Verify
https://antondevtips.com/blog/how-to-simplify-assertions-in-unit-and-integration-tests-with-verify-in-dotnet
- Интеграционные тесты c WireMock
https://antondevtips.com/blog/how-to-test-integrations-with-apis-using-wiremock-in-dotnet
- Best Practices для ASP .NET Core Integration Testing
https://antondevtips.com/blog/asp-net-core-integration-testing-best-practises?utm_source=linkedin&utm_medium=social&utm_campaign=01-04-2025
- MongoDB + .NET: практики
https://antondevtips.com/blog/best-practices-when-working-with-mongodb-in-dotnet
- CLI-приложения на .NET
https://antondevtips.com/blog/how-to-create-command-line-console-applications-in-dotnet
- Кастомизация ASP .NET Core Identity
https://antondevtips.com/blog/how-to-customize-aspnet-core-identity-with-efcore-for-your-project-needs
- Миграции для нескольких БД в EF Core
https://antondevtips.com/blog/how-to-create-migrations-for-multiple-databases-in-ef-core
- Управление жизненным циклом DbContext
https://antondevtips.com/blog/how-to-manage-ef-core-dbcontext-lifetime
- Views, Stored Procedures и Functions в EF Core
https://antondevtips.com/blog/calling-views-stored-procedures-and-functions-in-ef-core

✔️ PDF-сборник ресурсов — docs, туториалы, блоги, видео
https://anton-devtips.kit.com/dotnet-resources?utm_source=linkedin&utm_medium=social&utm_campaign=dotnet-resources-july-2025
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from C# 1001 notes
🧼 Как элегантно работать с конфигами в .NET?

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

Сейчас всегда использую Options pattern — и вот почему:

Привязываешь конфигурацию к строго типизированным классам
Добавляешь валидацию через аннотации
Чисто внедряешь настройки через DI (`IOptions<T>` или `IOptionsSnapshot<T>`)

Отлично работает для:
- appsettings.json
- фичефлагов
- конфигов внешних сервисов

Если хочешь чистый и масштабируемый код — лучше подхода пока нет.
Книги по PostgreSQL

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

📂 Перейти к просмотру

ITLES – Курсы программирования
Автор «сломал» RSA-512 (одна из старых криптосистем) всего за 3,5 часа даже на одном ядре старого ноутбука.

Он переписал задачу факторизации (разложение большого числа на два простых множителя) в виде булевой формулы и отдал ее на решение специальным решателям (SAT-солверам), которые подбирают ответы. То есть вместо того, чтобы напрямую «гадать» множители, он превратил задачу в головоломку из логических уравнений, которую современные алгоритмы щелкают на раз-два.

Получается, что RSA-512 сегодня уже абсолютно небезопасен, его можно разложить за считанные часы без суперкомпьютеров. Если такие методы ускорить или улучшить, то в будущем под угрозой окажутся и более серьёзные ключи вроде RSA-2048, которые сейчас используются в интернете и банках: https://u.habr.com/uMpM0
Вкратце современный стек разработки ПО
Forwarded from Bash Советы
Иногда нужно быстро найти и подсветить все IPv4-адреса в логах или текстовых файлах. Для этого отлично подходит регулярное выражение + grep.


grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' access.log


🔎 Что здесь происходит:

-E — включает расширенные регулярки.
-o — выводит только совпадения, без остальной строки.
([0-9]{1,3}\.){3}[0-9]{1,3} — шаблон поиска IPv4-адреса.

📌 Чтобы сразу убрать дубликаты и отсортировать список IP:


grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' access.log | sort -u


Это удобно при анализе логов Nginx/Apache или при поиске подозрительных подключений.

👉@bash_srv
Кратко опишите жизненный цикл потока в C#.

✍🏻 Состояние Unstarted (New): новый экземпляр класса Thread инициализирован и не запущен.
✍🏻 Состояние Runnable: вызывается метод Start(), и поток готов к запуску.
✍🏻 Выполняется: поток был выбран планировщиком для запуска.
✍🏻 Не готов к запуску: иногда его называют WaitSleepJoin, поток переходит в это состояние, когда мы вызываем Wait() или Sleep(), а также когда он вызывает Join() в другом потоке.
✍🏻 Состояние Dead: поток завершил свою задачу или был вызван метод Abort(); это последний этап жизненного цикла потока.

Библиотека задач по C#
В .NET Core сервисе под высокой нагрузкой заметны задержки при обработке запросов. Профилирование показывает частые блокировки потоков на lock. Как вы будете искать и устранять проблему?

Проанализирую contention через профилировщики (PerfView, dotTrace), посмотрю, где именно используются lock. Для оптимизации — заменить критические секции на более лёгкие механизмы синхронизации (ReaderWriterLockSlim, SemaphoreSlim), уменьшить область блокировки или перейти на lock-free структуры (ConcurrentDictionary, ConcurrentQueue).

Библиотека собеса по С#
В .NET Core приложении под высокой нагрузкой вы замечаете, что ответы API начинают задерживаться. Профилирование показывает блокировки потоков в ThreadPool. Как будете искать и устранять проблему?

Проверю, нет ли синхронных вызовов внутри async-методов (.Result, .Wait()), проанализирую contention на lock и тяжёлые операции в основном потоке. Для оптимизации — вынесу CPU-bound задачи в Task.Run или ProcessPool, ограничу параллелизм через SemaphoreSlim, а для I/O оставлю async/await без блокировок.

Библиотека собеса по С#
Долгоживущий .NET-сервис постепенно “распухает” по памяти без явных LOH-пиков. В дампе видно множество делегатов/лямбд, Timer и CancellationTokenRegistration, висящих в Gen2. Как диагностировать и устранить утечки из-за событий/таймеров/регистраций?

Проанализировать пути до корней (dotMemory/PerfView/dotnet-dump gcroot) — проверить коллекции подписчиков и списки делегатов у источников событий. Убедиться, что:

✍🏻 все подписки снимаются в Dispose/IAsyncDisposable;
✍🏻 CancellationToken.Register хранит IDisposable и корректно Dispose();
✍🏻 Timer/PeriodicTimer/System.Threading.Channels закрываются/завершаются;
✍🏻 не удерживаются замыканиями большие объекты/this.

При необходимости — слабые события/WeakReference, паттерн “own the lifetime”, и тест “утечек” в CI с сравнением heap-снимков.


Библиотека собеса по С#