В .NET Core сервисе под высокой нагрузкой вы замечаете рост задержек и частые блокировки потоков при работе с БД. Как будете искать и устранять проблему?
Проверить, не используются ли синхронные вызовы (.Result, .Wait()), профилировать async-цепочки. Убедиться, что пул подключений к БД настроен корректно, и что долгие операции не блокируют ThreadPool. Решение — переписать на полноценный async/await, оптимизировать запросы, при необходимости ограничить параллелизм через SemaphoreSlim или использовать кэширование.
Библиотека собеса по С#
Библиотека собеса по С#
🔥2😢1
В ASP.NET Core под нагрузкой растёт хвост задержек: CPU низкий, но наблюдаются пики длины очереди ThreadPool и таймауты HttpClient. Где искать корень проблемы и как её устранить?
Это типичный признак thread pool starvation из-за sync-over-async: блокировки .Result/.Wait(), синхронные I/O или тяжёлая синхронная работа в request-потоках. Диагностика — EventCounters/PerfView (ThreadPool QueueLength, Contentions), анализ async-стека. Решение — сделать путь запроса полностью асинхронным (DB/HTTP/FS), убрать блокировки, вынести CPU-bound в Task.Run/фоновые очереди, корректно использовать HttpClientFactory, и как временную меру — поднять ThreadPool.SetMinThreads.
Библиотека собеса по С#
Библиотека собеса по С#
Как используется property?
Свойство — это обёртка вокруг поля. Свойство используется как для присвоения, так и для чтения значения из поля с помощью методов set и get. Свойство можно создать для различных полей, таких как закрытые, открытые, защищённые и внутренние.
Библиотека собеса по С#
Библиотека собеса по С#
👍2🥱2
В ASP.NET Core у вас async-метод защищает кэш обычным lock и делает await внутри критической секции. Под нагрузкой — залипания и просадка RPS. В чём проблема и как починить?
await внутри lock держит монитор и блокирует потоки → contention/starvation и возможные deadlock’и. Решение: не делать await под lock; использовать ConcurrentDictionary (например, GetOrAdd с Lazy<Task<T>>) или асинхронную синхронизацию (SemaphoreSlim/AsyncLock, часто per-key), выносить await за пределы критической секции.
Библиотека собеса по С#
Библиотека собеса по С#
🦾 Почему ваши AI-продукты на базе LLM ломаются (и как это чинить)?
Выкатили ИИ-фичу в прод, а она галлюцинирует, падает или выдает мусор? Приглашаем на открытый вебинар, где разберем реальную боль внедрения LLM-агентов и научимся делать так, чтобы «всё работало».
🗓 Когда: 14 мая в 19:00 МСК
⏱️ Формат: 60 минут мяса + 30 минут ответов на ваши вопросы
🧑🏻💻 Кто вещает: Эмиль Сатаев — Backend Platform Developer (8+ лет в разработке). Человек, который своими руками внедряет LLM и агентные системы в реальные коммерческие сервисы.
🎁 Главный бонус для онлайна:
Только участникам прямого эфира подарим уникальный промокод на скидку 10.000 ₽ на большой курс AgentOps.
👉 Занять место на вебинаре
Выкатили ИИ-фичу в прод, а она галлюцинирует, падает или выдает мусор? Приглашаем на открытый вебинар, где разберем реальную боль внедрения LLM-агентов и научимся делать так, чтобы «всё работало».
🗓 Когда: 14 мая в 19:00 МСК
⏱️ Формат: 60 минут мяса + 30 минут ответов на ваши вопросы
🧑🏻💻 Кто вещает: Эмиль Сатаев — Backend Platform Developer (8+ лет в разработке). Человек, который своими руками внедряет LLM и агентные системы в реальные коммерческие сервисы.
🎁 Главный бонус для онлайна:
Только участникам прямого эфира подарим уникальный промокод на скидку 10.000 ₽ на большой курс AgentOps.
👉 Занять место на вебинаре
Что такое AJAX в ASP.NET?
Полная форма ASP.NET AJAX — это асинхронный JavaScript и XML. ASP.NET AJAX, также известный как AJAX, представляет собой набор дополнений ASP.NET . Он использует асинхронную передачу данных между браузером и веб-сервером, чтобы веб-страницы могли запрашивать небольшие фрагменты информации с сервера вместо целых страниц. Этот метод делает интернет-приложения меньше, быстрее и удобнее для пользователя. Он создан корпорацией Microsoft для выполнения функций AJAX в веб-приложениях. ASP.NET AJAX работает с библиотекой AJAX, которая использует объектно-ориентированное программирование (ООП) для более быстрых многофункциональных веб-приложений.
Библиотека собеса по С#
Библиотека собеса по С#
❤1
Как запускать один периодический джоб на весь кластер ASP.NET Core без внешнего планировщика?
Оберните BackgroundService в распределённый lock (Redis SET NX PX, Postgres advisory lock и т.п.) с heartbeats/TTL и авто-продлением; выполняйте работу только у лидера. Делайте задачи идемпотентными, держите дедлайны/отмену, при потере lock — немедленно завершайте цикл. Сохраняйте «курсор прогресса» в БД.
Библиотека собеса по С#
Библиотека собеса по С#
👍1
Как правильно реализовать освобождение ресурсов в IAsyncDisposable?
Короткий ответ: Реализуйте шаблон с охраной от повторного вызова: DisposeAsync() вызывает приватный DisposeAsyncCore() и синхронный Dispose(false), закрывает IAsyncDisposable ресурсы через await using, остальные — в Dispose. Используйте AsyncLazy/флаг disposed, прокидывайте CancellationToken только там, где это безопасно, и учитывайте, что await using всегда вызывает именно DisposeAsync().
Библиотека собеса по С#
Библиотека собеса по С#
This media is not supported in your browser
VIEW IN TELEGRAM
Тема: Почему AI-продукты на базе LLM ломаются и как сделать, чтобы работало.
В кружке выше Эмиль Сатаев рассказал, какие именно проблемы с LLM в проде будем разбирать.
Что в программе:
- Разберем реальные кейсы стартапов и ограничения LLM.
- Обсудим рабочие архитектуры: RAG, human-in-the-loop, контроль качества.
- Ответим на ваши вопросы и разберем кейсы участников.
🎁 Бонусы: в конце вебинара подарим промокод на скидку 10.000 ₽ на курсы и разыграем подписки на полезные AI-сервисы.
👉 Зарегистрироваться на вебинар
Please open Telegram to view this post
VIEW IN TELEGRAM
Когда выбирать struct/record struct вместо class?
Для маленьких, неизменяемых и часто копируемых значений (≤ ~16–32 байт), где важна локальность и отсутствие аллокаций. Нужны структурное равенство/with — берите record struct. Если объект крупный/мутабельный/долго живёт — используйте class.
Библиотека собеса по С#
Библиотека собеса по С#
👍7❤1
В Unity-проекте вы замечаете, что FPS резко проседает при активации новых объектов на сцене. Как вы будете искать и устранять проблему?
Сначала проверю профайлером (Unity Profiler, Deep Profile), чтобы понять, тратится ли время на Instantiate, GC или загрузку ассетов. Для оптимизации — применю Object Pooling вместо частого создания/уничтожения объектов, использую Addressables для асинхронной подгрузки, а также разделю тяжёлые операции на несколько кадров (coroutines/Jobs).
Библиотека собеса по С#
Библиотека собеса по С#
👍2
🔥 Знакомьтесь с экспертом Proglib.academy: Эмиль Сатаев
Эмиль — эксперт с 8-летним опытом в разработке, который специализируется на внедрении LLM и агентных подходов в реальные коммерческие сервисы. Он точно знает, как проектировать архитектуру так, чтобы ИИ-функции работали стабильно в связке с внешними системами.
🏃♀️ Уже 14 мая Эмиль проведет открытый вебинар!
Обсудим самую «больную» тему: «Почему AI-продукты на базе LLM ломаются и как сделать, чтобы работало».
🗓 Когда: 14 мая в 19:00 (Мск)
Почему Эмиля стоит послушать:
🟣 8+ лет в разработке (Backend и Frontend)
🟣 Международный исследовательский опыт
🟣 Преподаватель-практик
🟣 Мастер интеграции AI в Backend
🔗 Зарегистрироваться на вебинар
Эмиль — эксперт с 8-летним опытом в разработке, который специализируется на внедрении LLM и агентных подходов в реальные коммерческие сервисы. Он точно знает, как проектировать архитектуру так, чтобы ИИ-функции работали стабильно в связке с внешними системами.
Обсудим самую «больную» тему: «Почему AI-продукты на базе LLM ломаются и как сделать, чтобы работало».
🗓 Когда: 14 мая в 19:00 (Мск)
Почему Эмиля стоит послушать:
Прошел путь от фулстека до Backend Platform Developer в SMIT.Studio.
Работал исследователем в Институте ИИ НИУ ВШЭ и в Национальном университете Сингапура (NUS).
Ведет семинары в НИУ ВШЭ, в том числе по проектированию и разработке агентских систем.
Его главная суперсила — умение правильно встраивать LLM через API, выстраивать workflow и агентную логику в сложных распределенных системах.
🔗 Зарегистрироваться на вебинар
Please open Telegram to view this post
VIEW IN TELEGRAM
Объясните, как работают асинхронные делегаты в C#, и как они могут быть использованы для улучшения производительности приложений?
Асинхронные делегаты в C# позволяют выполнить метод асинхронно в отдельном потоке. Это делается с помощью методов BeginInvoke и EndInvoke. BeginInvoke запускает метод асинхронно, а EndInvoke ожидает завершения метода и возвращает результат. Асинхронные делегаты полезны для выполнения длительных операций, таких как I/O операции или сложные вычисления, без блокирования основного потока выполнения. Это улучшает отзывчивость приложения, особенно в GUI-приложениях, где важно поддерживать активный пользовательский интерфейс, в то время как выполняются фоновые задачи. Однако, следует управлять ресурсами и обрабатывать исключения при использовании асинхронных делегатов, чтобы избежать утечек памяти и других проблем.
Библиотека собеса по С#
Библиотека собеса по С#
Как спроектировать высокопроизводительную очередь задач без блокировок?
Используйте System.Threading.Channels: ограниченный Channel даёт backpressure, продюсеры пишут WriteAsync, консьюмеры читают ReadAllAsync параллельно, отмена через CancellationToken. Минимизируйте аллокации (ValueTask, пулы), избегайте глобальных lock, измеряйте throughput/latency и не перегружайте ThreadPool.
Библиотека собеса по С#
Библиотека собеса по С#
🤔2
Перечислите различные методы трассировки, представленные в ASP.NET?
Assert() проверяет условие и выводит сообщение, если условие ложно.
Close() очищает выходной буфер, а затем закрывает прослушиватели, чтобы они больше не получали отладочные выходные данные.
Fail() — этот метод выдает сообщение об ошибке.
GetType() используется для получения типа объекта.
ToString() возвращает строку, представляющую текущий объект.
GetHashCode() — метод работает как хэш-функция для определенного типа. Он подходит для использования в алгоритмах хэширования и структурах данных, таких как хэш-таблица.
Equals() определяет, является ли указанный объект тем же экземпляром, что и текущий объект.
Warn() имеет две формы. Первая форма записывает информацию трассировки в журнал трассировки, включая любые определенные пользователем категории.
Write() имеет две формы. Первая форма записывает информацию в журнал трассировки, включая любые определенные пользователем категории и сообщения.
Библиотека собеса по С#
Close() очищает выходной буфер, а затем закрывает прослушиватели, чтобы они больше не получали отладочные выходные данные.
Fail() — этот метод выдает сообщение об ошибке.
GetType() используется для получения типа объекта.
ToString() возвращает строку, представляющую текущий объект.
GetHashCode() — метод работает как хэш-функция для определенного типа. Он подходит для использования в алгоритмах хэширования и структурах данных, таких как хэш-таблица.
Equals() определяет, является ли указанный объект тем же экземпляром, что и текущий объект.
Warn() имеет две формы. Первая форма записывает информацию трассировки в журнал трассировки, включая любые определенные пользователем категории.
Write() имеет две формы. Первая форма записывает информацию в журнал трассировки, включая любые определенные пользователем категории и сообщения.
Библиотека собеса по С#
❤4
Напишите программу для сложения всех чётных чисел в массиве
Ответ:
static long TotalAllNum(int[] intArray) {
return intArray.Where(i => i % 2 == 0).Sum(i => (long)i);
}
Библиотека собеса по С#
Ответ:
Библиотека собеса по С#
❤2👍1👏1😁1
Как можно использовать шаблон проектирования Singleton в C#?
Шаблон проектирования Singleton используется в C# в ситуации, когда класс имеет один экземпляр и доступ предоставляется всем.
🐸 Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱3👍1👏1
Что делает ключевое слово var в C#?
Компилятор выводит статический тип переменной по правой части выражения. Это не dynamic: тип фиксируется на этапе компиляции. Нельзя использовать без инициализации и менять тип этой переменной позже.
Библиотека собеса по С#
Библиотека собеса по С#
👍2❤1
Что такое Span<T> и Memory<T> в C# и в чём между ними разница?
Правило выбора:
Библиотека собеса по С#
Span<T> — это ref-структура, представляющая непрерывный участок памяти (массив, стек, неуправляемая память) без аллокаций в куче. Позволяет работать с подмассивами, строками и буферами без копирования. Так как это ref struct, Span<T> живёт только на стеке: его нельзя сохранять в полях класса, использовать в async-методах, итераторах или захватывать в лямбдах.Memory<T> — обычная структура с теми же возможностями по представлению участка памяти, но без ограничений ref-структуры. Её можно хранить в полях, передавать через await, использовать в асинхронном коде. Получить Span<T> из Memory<T> можно через свойство .Span.Правило выбора:
Span<T> — для синхронного, горячего кода с максимальной производительностью; Memory<T> — когда нужно пересечь границы async/await или сохранить ссылку на буфер.Библиотека собеса по С#
❤4👍1