gram news
Библиотека шарписта | C#, F#, .NET, ASP.NET channel avatar

Библиотека шарписта | C#, F#, .NET, ASP.NET

@csharpproglib

Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

ProjectsRUProgramming

21,700subscribers

Open the Channel

Latest posts

  • Библиотека шарписта | C#, F#, .NET, ASP.NET

    23 Sept, 12:01

    ⚙️ yield return не бесплатныйИтераторы выглядят просто, но работают иначе:IEnumerable<int> GetIds() { foreach (var item in _items) yield return item.Id; }Читается как обычный цикл. Но компилятор превращает такой метод в конечный автомат со вспомогательными классами и состоянием. Именно поэтому итераторы такие выразительные — но и именно поэтому они не бесплатны. Где это становится проблемойНа большинстве путей yield return это правильный выбор. Код чище, API удобнее, читаемость выше.Но на горячих путях, где метод вызывается тысячи раз в секунду, повторное создание объектов итератора и дополнительные слои абстракции начинают влиять на производительность. Не катастрофически, но измеримо. Что делать на критичных участкахЕсли профилировщик показал, что итератор узкое место, есть несколько альтернатив.🟡 Заполнение буфера, переданного вызывающей стороной:void FillIds(Span<int> buffer) { for (int i = 0; i < _items.Count; i++) buffer[i] = _items[i].Id; }🟡 Возврат конкретной коллекции:List<int> GetIds() { var result = new List<int>(_items.Count); foreach (var item in _items) result.Add(item.Id); return result; }
  • Библиотека шарписта | C#, F#, .NET, ASP.NET

    22 Sept, 06:47

    💡 Replace, Regex или StringBuilder?Для замены текста в C# есть несколько инструментов. И выбирать их лучше не по принципу «что быстрее», а по задаче.🔜 string.Replace() — когда ищем конкретный текст:var result = text.Replace("cat", "dog");🔜 Regex.Replace() — когда нужен шаблон:var result = Regex.Replace( text, @"\d+", "#");Например, заменить все числа на #.🔜 StringBuilder.Replace() — когда последовательно изменяем большой текст:var sb = new StringBuilder(text);
    1,770632Open in Telegram
  • Библиотека шарписта | C#, F#, .NET, ASP.NET

    21 Sept, 13:05

    ⚙️ Настоящие атомарные операцииЕсли Volatile решает проблему видимости, то Interlocked решает проблему атомарности. Операции реализованы на уровне процессора и выполняются как неделимые единицы — никакой другой поток не может вмешаться в середину➡️ Самый частый сценарий это счётчик, который обновляют несколько потоков:private int _counter;public void Increment() { Interlocked.Increment(ref _counter); }Без Interlocked операция _counter++ на самом деле три шага: прочитать, прибавить, записать. Два потока могут выполнить их одновременно и затереть результат друг друга. Interlocked.Increment делает всё это за один неделимый шаг.➡️ Lock-free генератор IDInterlocked подходит для генерации уникальных идентификаторов без блокировок:public int GetNextId()
    1,870741Open in Telegram
  • Библиотека шарписта | C#, F#, .NET, ASP.NET

    20 Sept, 11:02

    💪 Разминка перед трудовыми буднямиЧто произойдёт?❤️ — список станет [1, 3] 🔥 — InvalidOperationException 👍 — цикл пропустит 2Ответ спрячем здесь:🔥 InvalidOperationExceptionforeach использует List<T>.Enumerator. После Remove() коллекция изменяется, перечислитель обнаруживает изменение при следующем MoveNext() и выбрасывает исключение.📍 Навигация: Вакансии • Задачи • Собесы🐸Библиотека шарписта#dotnet_challenge
    Image from a post by Библиотека шарписта | C#, F#, .NET, ASP.NETImage from a post by Библиотека шарписта | C#, F#, .NET, ASP.NET
    2,1806051Open in Telegram
  • Библиотека шарписта | C#, F#, .NET, ASP.NET

    19 Sept, 10:31edited

    🧩 Middleware в ASP.NET Core: 3 ловушкиMiddleware — звено HTTP pipeline:app.Use(async (context, next) => { Console.WriteLine("Request");await next(context);Console.WriteLine("Response"); });1️⃣ Забыл next() — остановил pipelineawait _next(context);Если его не вызвать, middleware ниже и endpoint не выполнятся.2️⃣ Scoped-сервис не стоит инжектить в конструктор
  • Библиотека шарписта | C#, F#, .NET, ASP.NET

    18 Sept, 12:01

    📍 Навигация: Вакансии • Задачи • Собесы🐸Библиотека шарписта#garbage_collector
    Image from a post by Библиотека шарписта | C#, F#, .NET, ASP.NETImage from a post by Библиотека шарписта | C#, F#, .NET, ASP.NET
    2,690982Open in Telegram
  • Библиотека шарписта | C#, F#, .NET, ASP.NET

    17 Sept, 14:01

    🦆 Duck typing в C# — почти как в TypeScriptВ TypeScript достаточно, чтобы у объекта был нужный метод:function foo(a: { Do(): void }) { a.Do(); }🔜 В C# так напрямую нельзя:class A { public void Do() => Console.WriteLine("A.Do"); }class B { public void Do() => Console.WriteLine("B.Do"); }
    Image from a post by Библиотека шарписта | C#, F#, .NET, ASP.NETImage from a post by Библиотека шарписта | C#, F#, .NET, ASP.NET
    2,780422Open in Telegram
  • Библиотека шарписта | C#, F#, .NET, ASP.NET

    17 Sept, 06:31

    🧠 Почему .NET-под съедает всю память?kubectl top pod показывает 1 ГБ, а managed heap занимает всего 300 МБ. Куда делись остальные 700?Память .NET-процесса — это не только GC:— managed heap; — JIT и загруженные сборки; — стеки потоков; — native-библиотеки; — буферы сокетов; — runtime и TLS.Поэтому одного GCHeapHardLimitPercent недостаточно: он ограничивает только managed heap.🔴 Что проверить:kubectl top pod dotnet-counters monitor -p <pid> System.Runtime dotnet-gcdump collect -p <pid>
    Image from a post by Библиотека шарписта | C#, F#, .NET, ASP.NETImage from a post by Библиотека шарписта | C#, F#, .NET, ASP.NET
    2,78011Open in Telegram
  • Библиотека шарписта | C#, F#, .NET, ASP.NET

    15 Sept, 09:10

    🧑‍💻 Забытый await: от race condition до DoS-атакиВ C# ключевое слово async — это инструкция компилятору превратить метод в state machine. await отмечает точку логической приостановки. Всё просто: выполнение не должно продолжаться, пока результат не существует.При await весь код выполняется синхронно, пока не достигнет I/O или функции, возвращающей Task. Если Task не завершён, происходит раскрутка кадра стека, и поскольку обрамляющие методы приостановлены до самого верха, поток может быть освобождён в пул потоков.Позже задача завершается, продолжение планируется и выполнение возобновляется там, где остановилось. Это не параллельное выполнение, это приостановка и возобновление.Если забыли await:var task = GetDataAsync(); // забыли await Use(task);Это режим «запустил и забыл» (fire-and-forget). Последствия:• выполнение продолжается немедленно • зависимость не обеспечивается
    2,9307422Open in Telegram
  • Библиотека шарписта | C#, F#, .NET, ASP.NET

    15 Sept, 07:30edited

    😭 Как не потратить недельный лимит AI-кодинга за три дня?Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода.🔘 Поговорим о том:— когда дорогая модель действительно нужна, а когда хватит дешёвой; — сколько стоит один прогон и куда уходят токены; — какие задачи можно отдавать субагентам; — как настроить маршрутизацию моделей; — что проверять в AI-коде перед merge.✏️ Покажем всё на конкретных цифрах и вживую: сравним расходы до и после.⬇️ 17 сентября, 19:00 МСК ⬇️ 1,5 часа · бесплатно ⬇️ Арсений Харланов и Олег Лайок💬 Пишите в комментариях, где упираетесь в лимиты и на что уходят деньги. Самые залайканные вопросы
    Image from a post by Библиотека шарписта | C#, F#, .NET, ASP.NETImage from a post by Библиотека шарписта | C#, F#, .NET, ASP.NET
    2,840421Open in Telegram
  • Библиотека шарписта | C#, F#, .NET, ASP.NET

    14 Sept, 18:00

    🧩 Union types появились в ASP.NET Core на .NET 11В C# 15 можно описать тип с несколькими допустимыми вариантами:public union IntOrString(int, string);Такой endpoint может вернуть либо число, либо строку:app.MapGet("/max-unavailable", () => new IntOrString(2));JSON останется обычным:2 или: "25%"Без $type и дополнительных обёрток.Главный плюс — компилятор проверяет, что switch обработал все варианты union.
    3,060213Open in Telegram
  • Библиотека шарписта | C#, F#, .NET, ASP.NET

    13 Sept, 14:01

    С днем программиста, коллеги!Желаем, чтобы код компилировался с первого раза, баги находились до релиза, а таски «на пять минут» действительно занимали пять минут.И конечно, пусть в жизни будет больше приятных сюрпризов — один из них мы уже подготовили. Скорее переходите по ссылке, трясите коробку и забирайте свой подарок ко Дню программиста: https://tprg.ru/YtJ2
    Image from a post by Библиотека шарписта | C#, F#, .NET, ASP.NETImage from a post by Библиотека шарписта | C#, F#, .NET, ASP.NET
    3,19015941Open in Telegram
  • Библиотека шарписта | C#, F#, .NET, ASP.NET

    13 Sept, 10:03

    🧠 When и Unless для умных проверокВ FluentValidation условная валидация запускает правила только при нужных условиях. When и Unless экономят циклы и делают валидаторы читаемыми.• When = «проверить, если условие верно» • Unless = «проверить, если условие НЕ верно»Пример:RuleFor(x => x.ShippingAddress) .NotEmpty() .When(x => x.DeliveryMethod == "Express");RuleFor(x => x.CreditCard) .NotEmpty() .Unless(x => x.PaymentMethod == "PayPal");When проверяет условие перед правилом. Express доставка требует адрес, PayPal не требует карту. Логика в одном месте без if-else в контроллере.📍 Навигация: Вакансии • Задачи • Собесы
  • Библиотека шарписта | C#, F#, .NET, ASP.NET

    13 Sept, 08:50

    🌸 Вселенная намекает: пора уже начать этот курсС 14 сентября цены в Proglib Academy вырастут на 20% 👀Так что если курс давно ждёт своего часа — лучше не откладывать ещё на месяц 😏📍 Выбрать курс
    3,030video2Open in Telegram
  • Библиотека шарписта | C#, F#, .NET, ASP.NET

    12 Sept, 14:01

    📍 Навигация: Вакансии • Задачи • Собесы🐸Библиотека шарписта#garbage_collector
    Image from a post by Библиотека шарписта | C#, F#, .NET, ASP.NETImage from a post by Библиотека шарписта | C#, F#, .NET, ASP.NET
    3,06022Open in Telegram
  • Библиотека шарписта | C#, F#, .NET, ASP.NET

    12 Sept, 13:04

    🌞 Готовим вебинар про AI в разработке и хотим сделать его максимально полезнымЧто реально хочется разобрать? Где чаще всего застреваете? Что пробовали, но так и не получилось нормально внедрить?🤩 Пишите вопросы в комментариях — самые залайканные разберём на вебинаре в первую очередь.Задавайте всё, что давно хотелось спросить 📍📍 Навигация: Вакансии • Задачи • Собесы🐸Библиотека шарписта
  • Библиотека шарписта | C#, F#, .NET, ASP.NET

    10 Sept, 11:49

    ✏️ Async/Await в C# — шпаргалка➡️ Что такое TaskTask — это обещание, что какое-то событие произойдёт в будущем. Не результат, а именно обещание.Task<T> — то же самое, но с результатом типа T. Когда задача завершится, значение станет доступно.Задача считается завершённой, когда событие произошло или значение получено. Проверить это можно через IsCompleted или Status.➡️ Как дождаться результатаПравильно — асинхронно:• await task — отпускает поток, пока задача не завершится. Поток свободен, приложение не зависает.• ContinueWith(action) — задача сама вызовет ваш колбэк, когда завершится. Полезно, если нужно выстроить цепочку без await.Неправильно — синхронно:
    3,4701951Open in Telegram
  • Библиотека шарписта | C#, F#, .NET, ASP.NET

    9 Sept, 14:36

    🚀 .NET 11 вышел в Release Candidate 18 сентября Microsoft выпустила первый RC .NET 11. У него уже есть Go-Live Support, поэтому сборку можно использовать в production — хотя для критичных систем разумнее дождаться финального релиза.Что главное:→ C# 15 стал default для .NET 11 — union types и closed hierarchies больше не preview;→ runtime получил новые возможности для диагностики и оптимизации, включая crash reporting на Unix и аппаратное ускорение System.Half;→ обновились SDK, MSBuild, NuGet, ASP.NET Core, MAUI и WinForms.🌞 Финальный .NET 11 запланирован на 10 ноября и будет STS-релизом.А 10 ноября заканчивается поддержка .NET 8 и .NET 9. Для них уже вышли сентябрьские security updates: 8.0.31, 9.0.20 и 10.0.12.📍 Навигация: Вакансии • Задачи • Собесы
    Image from a post by Библиотека шарписта | C#, F#, .NET, ASP.NETImage from a post by Библиотека шарписта | C#, F#, .NET, ASP.NET
    3,740112Open in Telegram
  • Библиотека шарписта | C#, F#, .NET, ASP.NET

    8 Sept, 13:02

    💥 Куда исчезает метод после JIT-компиляции?В C# мы пишем:int Double(int x) => x 2;var result = Double(21);Но JIT может решить, что отдельный вызов здесь вообще не нужен.При inlining тело метода встраивается непосредственно в вызывающий код:🔴 До:call Double ↓ x 2🔴 После:
    3,83083Open in Telegram
  • Библиотека шарписта | C#, F#, .NET, ASP.NET

    7 Sept, 17:02

    🧪 MSTest 4.4 теперь поддерживает Native AOTТесты тоже должны проверять то, что мы отправляем в production. Native AOT означает trimming, ограничения reflection и отсутствие runtime code generation. Обычный managed-тест может этого не показать.В MSTest 4.4 появился source generation для тестов — test discovery и запуск можно выполнять без зависимости от runtime reflection.<PublishAot>true</PublishAot>В итоге можно прогнать тесты в тех же AOT-условиях, в которых будет работать приложение.Особенно полезно для проектов, где Native AOT — часть production-сборки.📍 Навигация: Вакансии • Задачи • Собесы🐸Библиотека шарписта#async_news