Библиотека шарписта | C#, F#, .NET, ASP.NET
22.9K subscribers
2.26K photos
36 videos
85 files
4.43K links
Все самое полезное для C#-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/b60af5a4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
🛠 Tmds.ExecFunction — С#-библиотека, упрощающая выполнение функции в отдельном процессе.

Это может быть полезно для написания тестов, требующих отдельного процесса, или для запуска кода с другим временем жизни, чем у процесса .NET-приложения.

Библиотека основана на классе corefx RemoteExecutorTestBase 👇

🔗 GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17
🚀string.Contains(char) vs. string.Contains(string): когда производительность находишь там, где вообще не ждешь

#dotnet #csharp #benchmarks #tip by Сергей Тепляков
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱21👍14
📚 BookClub DotNet — подкаст для .NET-разрабов и не только, в котором ведущие (Роман Гашков, Григорий Кузьмин и Роман Щербаков) читают книги и во всех деталях обсуждают ключевые мысли из них вместе с гостями.

🎙 Во втором сезоне подкаста они обсуждают книгу по проектированию «System Design. Подготовка к сложному интервью»:

🔸 Выпуск 1: System Design. Подготовка к сложному интервью
🔸 Выпуск 2: масштабирование от нуля до миллионов пользователей
🔸 Выпуск 3: приблизительные оценки
🔸 Выпуск 4: общие принципы прохождения интервью
🔸 Выпуск 5: проектирование ограничителя трафика
🔸 Выпуск 6: согласованное хеширование
🔸 Выпуск 7: проектирование хранилища типа «ключ-значение»

#подкасты
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥28👍2😁1
🤔 Как получить ассемблерный код, сгенерированный JIT для C#-метода?

Когда вы выполняете .NET-метод, JIT компилирует его в машинный код. Этот нативный код затем выполняется процессором.

Если у вас вдруг возникла необходимость исследовать сгенерированный ассемблерный код, сделать это можно несколькими способами:

Использовать переменную окружения DOTNET_JitDisasm (.NET 7+)
Использовать расширение для Visual Studio Disasmo
Использовать онлайн-сервис Sharplab, если под рукой нет других инструментов
👍133🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
🤯🔥 Сеньор немного накосячил на проде...

Сам виноват, но быстро исправился и не потерял атмосферу!

#жиза
Please open Telegram to view this post
VIEW IN TELEGRAM
😁63👍32
🧰 При компиляции асинхронного C#-метода компилятор преобразует код, разбивая его на отдельные шаги. Потом, во время выполнения каждый шаг прерывается асинхронной операцией.

🤔 Когда она завершается, надо точно понимать, куда вернуть управление — в какой конкретно шаг. Поэтому все шаги нумеруются и компилятор очень строго следит за тем куда можно перейти. Такое решение называется state machine.

👨‍🎓 .NET/ASP.NET Core разработчик Родион Мостовой разбирается с понятием state machine для понимания принципа работы асинхронности в C#.

👉 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍32
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🏔 Эпикфейл: карьера катится к чертям

🤦‍♂️ У всех нас случались провалы в карьере, о которых не хочется распространяться. Неловкий момент на собеседовании, провал проекта из-за глупой ошибки, конфликт с начальством — такие ситуации хочется поскорее забыть. Однако часто именно они дают нам самые ценные уроки и закаляют как профессионалов.

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

👉 Поделиться историей
1👍1
👩‍💻 Новый TerminalLogger в .NET 8 SDK

TerminalLogger предоставляет более подробный вывод, по сравнению со стандартным консольным логгером, однако он не включен по умолчанию.

📌 Для активации используйте опцию --tl (например, dotnet build --tl) или включите его по умолчанию с помощью переменной окружения MSBUILDTERMINALLOGGER, которая может быть установлена в значения true, false или auto.

📌 Новый TerminalLogger можно включить для текущего пользователя:

[Environment]::SetEnvironmentVariable("MSBUILDTERMINALLOGGER", "auto", "User")


В статье также приводится сравнение вывода между стандартным консольным логгером и TerminalLogger, подчеркивая такие преимущества, как группировка предупреждений и ошибок по целевой платформе, улучшенная читаемость благодаря цветам, гиперссылки для основного вывода сборки, отображение времени выполнения для каждой цели и более понятный статус окончательной сборки.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍202
Можно ли ускорить рефлексию в .NET? Да, с помощью легковесной генерации кода на основе деревьев выражений.

Выше — пример оптимизации доступа к членам путем кэширования сгенерированных выражений доступа к полям или свойствам.

Это все еще в 100 раз медленнее, чем прямой доступ. Но в 10 раз быстрее, чем обычная рефлексия!

#dotnet #csharp #benchmarks #tip by Сергей Тепляков
12👍61💯1
🤦‍♂️ Есть такое слово «надо», которое отравляет многим жизнь. Надо получить вышку, надо жениться до стольких-то лет и родить детей до стольких-то, надо зарабатывать столько-то и еще много-много «надо».

❤️ Как с этим жить? Попробуйте вместо «надо» поставить «полезно». И если бесполезно — то не надо!

💬 А какое слово отравляет вашу жизнь? Поделитесь в комментариях 👇
👍12🥱74
👨‍💻 При разработке .NET-приложений почти всегда возникает необходимость включить в сборку сторонние ресурсы. Среди них могут быть данные любого типа: от исполняемых файлов до изображений и CSS-файлов.

Также часто возникает необходимость использовать разные ресурсы для разных целевых платформ. В статье автор разбирает два примера настройки MSBuild с разными ресурсами для каждой из выбранных операционных систем (Windows и Linux).

В комментариях один из читателей указал, что большинство свойств можно писать не элементами, а атрибутами в одной строке, например:

<EmbeddedResource Include="Images\linux.png" LogicalName="Images.Banner.png"/> 
<Content Include="run" CopyToOutputDirectory="PreserveNewest"/>
👍131
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🗄️ Базовые запросы SQL: получение записей из БД

В этой статье приведены примеры простых запросов SQL, которые начинающие программисты могут использовать для получения записей из своих баз данных.

🔗 Читать статью
🔗 Зеркало
17🥱9