Как стать автором
Поиск
Написать публикацию
Обновить
108.72

C# *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Заглядываем под капот FrozenDictionary: насколько он быстрее Dictionary и почему

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров15K

С релизом .NET 8 в арсенале C# разработчиков появилась новая коллекция – FrozenDictionary. Особенность этого словаря в том, что он неизменяемый, но при этом обеспечивает более быстрое чтение по сравнению с обычным Dictionary. Я неспроста разбил результаты на обложке по типам – используемые во FrozenDictionary алгоритмы сильно зависят от типа ключа, размера словаря или даже, например, количества строковых ключей одинаковой длины. В этой статье подробно разберем, насколько FrozenDictionary быстрее и почему.

Заглянуть под капот

Вот скажи мне, микросервис, в чем сила (часть 2)

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров5.4K

Если вы не читали начало - то оно здесь.

Вкратце же, там я описал как начал строить свой “интернет магазин электроники”. Да, именно в кавычках 🙂. Потому что это не магазин совсем, а эксперименты по реализации части механик. Конкретно, подбора товаров по параметрам. Запустил первый блин комом и сейчас буду наш первый блин улучшать.

В любом случае, первую часть будет полезно почитать хотя бы из-за дельных комментариев (как всегда на Хабре). Там любезно объяснили, что этому всему есть научный термин - фасетный поиск. И что данная реализация соответствует паттерну EAV. Да и вообще этот велосипед уже изобрели. Но меня это, конечно же, не остановит 🙂. Что может быть прекрасней собственного велосипеда!

Есть еще надежда, что написанные статьи привлекут внимание тех, кто реализует подобное не как я - ради развлечения, а ради работы. Может они в комментариях поделятся своими замерами производительности, или какими-то подводными камнями. Было бы интересно.

Показать

Event Sourcing и Saga с помощью Marten и Wolverine на C# и немного модульного монолита

Уровень сложностиСложный
Время на прочтение16 мин
Количество просмотров6.2K

В этой статье мы откажемся от контроллеров, MediatR-а и MassTransit-а, всё вышеперечисленное нам заменит Wolverine. Отольём в граните модульный монолит, имплементируем регистрацию событий, используя Marten. Пример всего этого безобразия находится тут.

На фото: Marten (Куница) слева, Wolverine (Росомаха) справа. Хью Джекман просился на обложку, но не прошёл кастинг.

Читать далее

Вычисление логического выражения из строки в C# (.NET)

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров6.7K

В этой статье я продемонстрирую, как динамически вычислять логические математические выражения из строк в C#, с высокой производительностью. Решение, реализованное с использованием библиотеки .NET MathEvaluator, поддерживает логические операции в различных математических контекстах, включая программирование, научные вычисления и C#. Кроме того, библиотека позволяет расширять эти контексты, а также добавлять пользовательские переменные и функции.

Возможность компиляции математических выражений из строк была добавлена в MathEvaluator 2.0

Читать далее

Обзор библиотеки FluentValidation. Часть 7.2. Встроенные валидаторы

Уровень сложностиПростой
Время на прочтение22 мин
Количество просмотров2.4K

В этой части рассмотрим следующие валидаторы:

Length — длина строки в указанном диапазоне либо точная.

MaximumLength — максимальная длина строки.

MinimumLength — минимальная длина строки.

LessThan — меньше чем значение, тип которого реализует интерфейс IComparable.

LessThanOrEqualTo — меньше или равно чем значение, тип которого реализует интерфейс IComparable.

Пройти валидацию

«Быстрое свидание» с LINQ

Уровень сложностиПростой
Время на прочтение19 мин
Количество просмотров14K

Краткое описание методов LINQ простым языком, без терминов "проекция", "предикат", "делегат" и проч.

Читать далее

Сравнение технологий для написания оконных приложений

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров17K

Как-то раз в одном чате прозвучала идея сравнить разные технологии для написания оконных приложений. В частности, под Windows. Используя средства языка C#. То есть, конечно, можно это сделать и с помощью C++, Python, Rust, JS и других языков, но мы же шарписты, нам интереснее именно то, что мы можем сами использовать, не меняя язык программирования.

Итак, оконные приложения на C#.

Читать далее

Как я оптимизировал свою первую игру на Unity, и написал ее заново

Время на прочтение4 мин
Количество просмотров4.4K

Доброго времени суток, дорогие читатели, большое спасибо за слова поддержки и полезные советы, который вы оставили в первой части Истории создания моей первой игры.

Читать далее

Asp.Net приложение и многое другое вместе с ним (1 часть)

Уровень сложностиСредний
Время на прочтение18 мин
Количество просмотров4.6K

Asp.Net + nginx + kafka + docker + docker-compose + postgersql. Или как из обычного шаблона прийти к такому гибриду.

Читать далее

Flax Engine. Знакомство с игровым движком и анализ его исходного кода

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров6.4K

"Как будто у Unreal и Unity родился ребёнок" — такое трогательное описание дали этому движку в GameDev-сообществе. Эта фраза не только мило звучит, но и точно передаёт его суть, ведь движок действительно задумывался как нечто среднее между Unity Engine и Unreal Engine.

Читать далее

Нам надоела нестабильность Microsoft Exchange, и мы перевели компанию на новый бэк календарей

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров5.6K

Всем привет. Это лонгрид о том, какие сложности у нас были с переводом календарей внутренней соцсети на новый бэк, как мы выруливали, как бета-тестили с помощью фича-флагов и как это всё в итоге того стоило. Подробный разбор большого проекта не для слабонервных))

Читать далее

Я на дереве сижу, препроцессинг провожу

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров2.1K

Согласно описанию,


Tree-sitter — это инструмент для генерации синтаксических анализаторов и библиотека инкрементного синтаксического анализа. Он может создавать конкретное синтаксическое дерево для исходного файла и эффективно обновлять синтаксическое дерево по мере редактирования исходного файла.

Но как Tree-sitter справляется с языками, в которых необходима стадия препроцессинга?

Читать дальше →

Как мы перешли на конфигурацию Microsoft.Extensions.Configuration (IOptions) и стало хорошо

Уровень сложностиПростой
Время на прочтение18 мин
Количество просмотров7.5K

Привет, меня зовут Андрей Рягузов, в 2ГИС я разрабатываю внутренние продукты для актуализации справочных данных на .NET.

Несколько лет назад для работы с настройками мы в команде пользовались самописным методом. Пока приложения были простыми, нас всё устраивало, однако при масштабировании начали вылезать неприятности. Так мы начали искать альтернативу.

Расскажу, почему изначально решились на нестандартный метод, с какими трудностями столкнулись и что решили улучшить, какие варианты рассматривали и какие преимущества получили от «коробочных» инструментов.

Читать далее

Ближайшие события

Основы обработки асинхронных событий с помощью Rx в C#

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров2.9K

Привет, Хабр!

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

Основная фича Rx заключается в управлении асинхронными данными так, как если бы они были синхронными коллекциями.

В этой статье мы рассмотрми, как работать с Rx в C#.

Читать далее

.NET Digest #2

Время на прочтение4 мин
Количество просмотров5.7K

Добро пожаловать на второй выпуск нашего дайджеста, посвящённого новостям и событиям в мире .NET! Первый выпуск вам понравился, так что C# команда PVS-Studio снова собрала для вас самые интересные и полезные материалы. Поехали!

Читать далее

Оптимизация производительности в Unity: советы и лучшие практики

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров5.7K

В данной статье мы рассмотрим ключевые методы оптимизации производительности в Unity. Вы узнаете, как повысить FPS вашей игры, улучшить управление памятью и сократить время загрузки. Мы также обсудим, как эффективно использовать профайлер Unity для анализа производительности. Статья предназначена для начинающих разработчиков, и каждый метод будет иллюстрирован примерами кода. После прочтения этой статьи вы сможете существенно улучшить производительность своего игрового проекта.

Читать далее

Вычисление любого математического выражения в C# (.NET)

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров3.1K

Для улучшения возможностей научных вычислений в C# я реализовал evaluator, способный вычислять любое математическое строковое выражение с исключительной производительностью. Он также поддерживает пользовательские переменные, операторы и функции. Библиотека .NET под названием MathEvaluator и её документация доступны на GitHub.

Для достижения высокой производительности при вычислении математических выражений используется сочетание современных возможностей .NET и эффективных алгоритмов.

Читать далее

Между строк: Анимации в UI Toolkit

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров1.4K

Рано или поздно пытливый программист замечает то, что предпочитал игнорировать — словно краем глаза видит тень в темном углу. А что, если за этой тенью скрывается нечто большее?

В этой статье мы исследуем тайны создания анимации вершин в UI Toolkit и узнаем, как придать вашим интерфейсам новую жизнь.

Перейти к делу

Сглаживание битовых изображений

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров1.7K

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

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

Один метод - избегать изогнутых линий и контуров в пиктограммах при их создании в редакторе. Другой, более интересный вариант - применить процедурное сглаживание изображений, также известное как antialiasing. Далее в качестве примера приводится один из простых вариантов сглаживания, применяемый мной в разных проектах.

Читать далее

ThreadPool – инъекция потоков

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров5.6K

В этой статье мы начнем с небольшого погружения в код ThreadPool’a, а закончим интересным кейсом применения матанализа в одной из самых важных частей многопоточности в дотнете.

С большой силой ThreadPool'а приходит большая ответственность! И поэтому наша ответственность – понимать устройство этого мощного инcтрумента, чтобы понимать его ограничения. А два главных способа понять: чтение кода и, конечно, эксперименты с многопоточностью...

Читать далее

Вклад авторов