Scaling SignalR With a Redis Backplane #SignalR #Redis #DotNet Статья объясняет, почему SignalR перестаёт доставлять сообщения при масштабировании и как решить это с помощью Redis Pub/Sub‑backplane. Описана настройка AddStackExchangeRedis, варианты с префиксом каналов и ключевые нюансы эксплуатации. 🔁 SignalR хранит карту подключений только на каждом инстансе; Redis backplane публикует сообщения всем серверам, и тот инстанс, где есть нужный клиент, доставляет уведомление. 🧩 Подключение: добавь...
A state of .NET
A State of .NET — всё для .NET-разработчика: новости, релизы, лучшие статьи о C#, .NET, ASP.NET Core, EF Core, и прочих технологиях. Ежедневно — новости, релизы, обзоры статей и книг, лучшие практики и инструменты.
Графики
📊 Средний охват постов
📉 ERR % по дням
📋 Публикации по дням
📎 Типы контента
Лучшие публикации
20 из 20RedLock.NET. Просто и со вкусом #dotnet #redis #postgresql Статья разбирает паттерн RedLock и библиотеку RedLock.NET для распределённых блокировок в .NET, сравнивает их с альтернативами (PostgreSQL advisory locks, таблицы в БД и стандартными примитивами .NET). Приведены практические примеры кода, рекомендации по параметрам expiry/wait/retry и замечания по безопасности и производительности. 🔒 RedLock.NET — простая и надёжная реализация на Redis: CreateLockAsync/IsAcquired, expiry должен быть в 5...
Нативный код в .NET-библиотеке и как его готовить #dotnet #csharp #pinvoke Практическая инструкция по вызову нативного кода из .NET: P/Invoke, маршалинг, сборка бинарников для Windows и macOS и упаковка в NuGet. Разбор паттернов (фасад нативного бэкенда), тонкостей делегатов и хэндлов, а также отличий DllImport и LibraryImport. 🧩 Унифицированный нативный бэкенд: скрываем OS-специфику за функциями с одинаковым API (например GetInputDevicesCount) и подключаем один бинари-импорт "Native". 🔌 P/Inv...
LINQ теперь умеет LeftJoin и RightJoin без ритуалов #dotnet #efcore #linq В .NET 10 и EF Core 10 появились LeftJoin и RightJoin, так что теперь outer join в LINQ можно писать прямо и читаемо, без привычной конструкции GroupJoin + SelectMany + DefaultIfEmpty. Для .NET-разработчиков это одна из самых приятных мелочей релиза: код стал ближе к SQL по смыслу и заметно проще для чтения. Раньше левое соединение выглядело так: var query = from customer in context.Customers join order in context.Orders o...
Поиск в коллекциях или когда O(N) быстрее O(1) #dotnet #csharp #performance Сравниваются Array.Contains и HashSet.Contains для int и string на .NET 6/8/10 с бенчмарками; объясняют, почему на малых коллекциях массивы иногда быстрее и какие аппаратные и компиляторные оптимизации за это отвечают. 🔎 На малых коллекциях (≈5–10 элементов) массивы в некоторых условиях обгоняют HashSet — в тестах на .NET 10 это наблюдается для int и особенно для string. ⚡ .NET 8 внедрил векторизацию (Vector128/256/512)...
Ten Months with Copilot Coding Agent in dotnet/runtime #dotnet #AI #CopilotCCA Статья о десятимесячном опыте использования GitHub Copilot Coding Agent (CCA) в репозитории dotnet/runtime при разработке .NET 10: данные по PR, кейсы, проблемы и практические выводы. Описывает, где CCA действительно помогает, где требуется осторожность и почему подготовка репозитория критична для успеха. 🤖 CCA сделал 878 PR в dotnet/runtime, 535 вмержено — показан масштабный пример human‑AI сотрудничества и итератив...
Одна фильтрация лучше двух #dotnet #csharp #performance Частая ошибка в .NET-коде — повторно выполнять один и тот же запрос к коллекции. Конструкция вроде list.Where(x => x > 10).Count() и потом list.Where(x => x > 10).Sum() выглядит безобидно, но на деле вы дважды проходите по данным и дважды запускаете одну и ту же логику фильтрации. Для маленького списка разница может быть незаметной, но на больших коллекциях, в горячем коде или при сложном предикате это уже лишняя работа. Особенно неприятно,...
Паттерн Идемпотентный потребитель в .NET и зачем он вам нужен #dotnet #idempotency #distributed-systems Статья объясняет проблемы дубликатов и повторных доставок в распределённых системах и показывает, как реализовать идемпотентного потребителя в .NET с помощью таблицы отслеживания, транзакций и подходов для внешних вызовов. 📨 Сообщения могут дублироваться, приходить не по порядку или задерживаться — нельзя полагаться на «ровно один раз» доставку. ✅ Дедупликация на стороне брокера (стабильный M...
Локальный LLM прямо в .NET сборке — без серверов, облаков, интернета! #dotnet #LLM #LocalAI #LLamaSharp Представь: запускаешь exe — и у тебя чат с ИИ на твоём железе. Никаких API ключей, приватность 100%. Делаем на LLamaSharp + Phi-3-mini (3.8B, ~2GB RAM). Шаг 1: Установка (2 минуты) dotnet new console -n LocalLlm cd LocalLlm dotnet add package LLamaSharp --prerelease dotnet add package LLamaSharp.Backend.Cpu # или .Gpu.Cuda12 для NVIDIA Шаг 2: Скачай модель Идём на https://huggingface.co/micros...
DDD ASP.NET Почему не удобно для больших проектов с более чем 30 реестрами #dotnet #aspnetcore #ddd Анализ причин, по которым классический DDD в связке с ASP.NET и EF Core становится проблемой в проектах с более 30 реестрами: тяжёлые агрегаты, горы спецификаций, транзакционные и навигационные боли. Предлагается прагматичный выход — гибридный подход с применением DDD только в ядре и более простых паттернов на периферии. 🧱 Тяжёлые агрегаты: строгий принцип "один запрос — один агрегат" ведёт к мно...