Библиотека шарписта | 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
Memory_Anti_Patterns_in_C#_In_the_context_of_aiming_for_a_clean….pdf
6.9 MB
🚀Антипаттерны управления памятью: на заметку C#-разработчику

Christophe Nasarre глубоко погружен в эту тему, и делится опытом с другими. Несмотря на то, что материал 2021 года, он стоит вашего внимания:

🔻Finalizer and IDisposable usage
🔻Provide list capacity when possible
🔻Prefer StringBuilder to +/+= for string concatenation
🔻Caching strings and interning
🔻Don’t (re)create objects

📌LINQ:
🔺Prefer IEnumerable<T> to IList<T>
🔺FirstOrDefault and Any are your friends… but might not be needed
🔺Avoid unnecessary ToList()/ToArray() calls
🔺Prefer IEnumerable<>.Any to List<>.Exists
🔺Prefer Any to Count when checking for emptiness
🔺Order in extension methods might matter
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥7
⚒️ ТОП-27 плагинов для Visual Studio Code в 2023

Предлагаем список лучших расширений для VS Code в 2023 году: продуктивность, окрашивание сниппетов, контроль версий, форматирование, линтинг и отладка.

🔗Читать статью
🔗Зеркало
🥰7❤‍🔥1
Разработка максимально упрощенного клона ASP.NET Core: пошаговый гайд

Steven Giesel постарался объяснить такие непростые аспекты, как DI контейнер, middleware + роутинг, простым языком.

👀Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🤔1
Разбираемся с библиотекой Azure Core для .NET

Одна из целей Azure SDK — предоставить унифицированный интерфейс разработки в Azure. То есть базовые возможности должны работать одинаково, независимо от того, с каким сервисом Azure вы работаете.

Anne Thompson, Principal Software Engineer (Azure SDK), представляет обзор библиотеки, её пространств имен и ключевых типов, которые вы будете использовать при разработке приложений с Azure SDK.
👍4
Таненбаум vs Торвальдс (микроядро vs монолит)

Старый добрый профессиональный спор, который перерос в холивар. Первыми его начали известные разработчики Эндрю Таненбаум и Линус Торвальдс в начале 90-х в одной из новостных групп «Юзнета».

Таненбаум и Торвальдс холиварили из-за архитектуры ядра ОС. Первый утверждал, что лучше использовать микроядра, второй — монолитное ядро. И сколько раз они не возвращались к публичному обсуждению архитектуры ядра, каждый оставался при своём мнении.

А что сейчас? Да ничего не изменилось. Холивар разгорается при обсуждении абсолютно любой темы.

Любите холиварить?
👍 — конечно — в споре рождается истина
🤔 — ненавижу — только мешает работать
💯 — смотря где и при каких обстоятельствах

#холивар
💯98👍30🤔12
Exist vs Any в .NET

Не спите? Тогда ловите немного бенчмарков в ленту. Мы получаем такой результат, так как Any() использует reference-type enumerator.
🔥49👍10
🤔Почему .NET не пользуется популярностью среди стартапов? Видео по мотивам обсуждения на Reddit от Ника Чапсоса

Пользователь интересуется, есть ли какая-то конкретная причина, по которой стартапы в Индии не используют C#/.NET для разработки бэкенда, особенно сейчас, когда платформа является опенсорсной и кроссплатформенной.

Вместо .NET стартапы выбирают Java и Node.js. В этом, безусловно, есть доля правды, и Ник Чапсас пытается добраться до истины👇

📺 Смотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔10👍63😁1
📌 Подборка за две недели на Code Maze:

🔹Использование HttpContext.Items для передачи данных с помощью ASP.NET Core: простая демонстрация использования HttpContext.Items для хранения и получения данных в контексте одного запроса
🔹Как использовать Stopwatch в C#: практика работы с классом, который предоставляет набор методов и свойств для точного измерения затраченного времени
🔹Методы проверки равенства чисел с плавающей точкой в C#: на что обратить внимание, чтобы не ошибиться
🔹Как использовать Moq для возврата значения, переданного в метод: пошаговый гайд для C#-разработчика
🔹Как использовать onchange event с Select DropDown в Blazor: учимся правильно отслеживать возникающие изменения
🔹Различные способы перезаписи файла в C#: обзор нескольких на практике
🔹Механизмы синхронизации в C#: Volatile vs Interlocked vs lock
🔹DateTimeOffset vs DateTime в C#: различия и сходства в деталях
🔹Различные уровни логирования в Serilog: подробное введение в популярную библиотеку
🔹Когда использовать ReaderWriterLockSlim в C#: простым языком о не самых простых аспектах

#dotnet #csharp #codemaze #матчасть
👍161
Когда речь заходит об асинхронных операциях в Unity, на ум первым делом приходит coroutine. И это не удивительно, так как большинство примеров в сети реализованы именно через них.

Но мало кто знает, что Unity поддерживает работу с async/await уже несколько лет. Залезть под капот async/await в Unity попытался автор серии статей:

🎮Часть 1: 8 причин отказаться от Coroutine в пользу Async в Unity
🎮Часть 2: 8 ошибок при использовании Async в Unity
🎮Часть 3: 😴
🔥2👍1
Стоит ли использовать эндпоинты .NET 8 Identity API?

Несмотря на то, что в недавней серии статей Эндрю Лок затрагивал эту тему, она заслуживает дополнительного внимания.

Эндрю разбирает дизайн эндпоинтов, последствия их использования и, наконец, делится мыслями о том, стоит ли их использовать. И помните — это лишь его субъективное мнение.

👀 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🤩 Команда Microsoft обновила пакет System.Text.Json в .NET 8

📌Вот краткий обзор улучшений:

🔹Значительно улучшен source generator и добавлен метод JsonTypeInfoResolver.Combine:

var options = new JsonSerializerOptions
{
TypeInfoResolver = JsonTypeInfoResolver.Combine(ContextA.Default, ContextB.Default, ContextC.Default);
};


🔹Добавлена поддержка required и init:

JsonSerializer.Deserialize("""{"Real" : 0, "Im" : 1 }""", MyContext.Default.Complex);

public record Complex
{
public required double Real { get; init; }
public required double Im { get; init; }
}

[JsonSerializable(typeof(Complex))]
public partial class MyContext : JsonSerializerContext { }


🔹Добавлен класс JsonStringEnumConverter<TEnum>
🔹Добавлена расширенная функциональность JsonSourceGenerationOptionsAttribute
🔹Добавлена возможность заполнения членов, доступных только для чтения
🔹Добавлена возможность отключения reflection по умолчанию и многое другое

👀 Подробнее
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🤔4
И снова бенчмарки, и снова борьба за наносекундами, но в этом случае разница в производительности весьма существенная.

#csharp #dotnet #tip by Dave Callan
👍453💯1
EF Core поддерживает несколько способов загрузки связанных данных, каждый из которых имеет свои преимущества и недостатки.

• Eager loading (жадная загрузка)
• Explicit loading (явная загрузка)
• Lazy loading (ленивая загрузка)

Maarten Balliauw, Developer Advocate в JetBrains, подробно рассматривает эту тему на примерах👇

🔗 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🥱5
🦸 9 способов настройки градиента цели для поддержания мотивации

Разбираемся, как настроить себя идти до конца, преодолевая препятствия и лень.

Читать статью

#саморазвитие
❤‍🔥2👍2🥱1
Переходим от группирования по типу к группированию по функционалу

Домен лежит в основе чистой архитектуры. В нем мы определяем сущности и бизнес-логику.

Если в вашем проекте структура с названиями вроде:

🔻Entities
🔻Enumerations
🔻Exceptions
🔻Repositories
🔻ValueObjects

Она ничего не говорит вам о Домене.

А что, если реорганизовать структуру, сгруппировав по функционалу? В таком случае в вашей структуре начнут появляться концепции предметной области.

#dotnet #csharp #tip by Milan Jovanović
💯29👍10🤔8🌚5
🔥Назад к основам .NET: как легко создать паттерн «Стратегия» с помощью внедрения зависимостей

Паттерн «Стратегия» — поведенческий паттерн проектирования, который определяет семейство схожих алгоритмов и помещает каждый из них в собственный класс, после чего алгоритмы можно взаимозаменять прямо во время исполнения программы. Ключевые компоненты, участвующие в реализации паттерна:

🔻Strategy — интерфейс, определяющий методы, которые должны реализовать все Concrete Strategies.
🔻Concrete Strategies — реализации интерфейса стратегии. Каждая Concrete Strategies обеспечивает конкретную реализацию алгоритма.
🔻Context — класс, который содержит ссылку на Concrete Strategies и выполняет ту или иную стратегию на основе входных данных приложения.

Некоторые разработчики могут не знать, что система внедрения зависимостей .NET делает за них большую часть тяжелой работы при реализации этого паттерна. Именно об этом и пойдет речь в руководстве👇

🔗 Читать
👍17