Обновить
46.42

C# *

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

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

Оптимизация загрузки CPU в C# (и немного в Unity): ключевые подходы и стратегии на примерах

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

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

Читать далее

I'm on the stairs to hell

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

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

Читать далее

Логирование с Serilog: как повысить отказоустойчивость и скорость

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели8.6K

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

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

Читать далее

Структура кода в папке Domain по DDD

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

В слое Domain 90% проектов с тактическим DDD забыли о самом главном. Сегодня мы вспомним то о чем забыли или узнаем то чего не знали.

Читать далее

DeepSeek + Unity: Как заставить ИИ рисовать схемы и не сойти с ума от веселья

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

Приветствую. Решил в данной статье поделиться информацией относительно приложения, которое я пишу на UNITY. Как-то запала мне мысль...

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

Читать далее

.NET C# и RabbitMQ Streams: превратить кролика в Kafka легко, нужно всего лишь…

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

Работа с очередями сообщений — важная часть современных систем обработки данных. В нашей команде мы используем брокер сообщений RabbitMQ, но нам пришлось столкнуться с проблемами при обработке большого объема данных. В поисках решений я начал изучать различные способы оптимизации, и таким образом познакомился с RabbitMQ Streams – плагином, добавляющим log-based потоки, работающие по аналогии с Kafka

Я потратил некоторые время, вникая в принципы работы RabbitMQ Streams с .NET и хочу представить вам краткий обзор, который призван упростить погружение в эту систему

Читать далее

Запуск WPF-приложений в Docker: Экспериментальный подход с Wine

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели6.2K

Запуск WPF на Linux долгое время казался невозможным. Но благодаря связке Docker и Wine теперь это реальность. Рассказываю о своем практическом опыте, как заставить эксклюзивную технологию Microsoft работать вне Windows.

Читать далее

Requestum 1.2.5: теги, политики устойчивости и встроенное логирование

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

Привет, Хабр! Около месяца назад я рассказывал о Requestum — CQRS-библиотеке для .NET, созданной как бесплатная альтернатива MediatR.

После той публикации в комментариях многие справедливо спрашивали: «Зачем нужна ещё одна CQRS-библиотека? Есть же Mediator, Wolverine, Brighter и другие проверенные решения. Чем твоя альтернатива лучше?»

Честный ответ на тот момент был: «Пока, наверное, ничем особенным — разве что MIT лицензией и чуть лучшей производительностью».

Но за этот месяц я постарался это исправить. Этот пост — мой ответ на те вопросы и рассказ о фичах, которые делают Requestum достойным внимания, а не просто «ещё одной библиотекой в списке».

Читать далее

Создание браузерного расширения с native messaging на C#

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели8.3K

Привет, Хабр. Меня зовут Алексей, я бэкенд-разработчик C#. Хочу рассказать о том как я узнал что такое native messaging в браузерах и какие задачи можно с его помощью решать. В одном проекте я разрабатывал десктопную утилиту, которая должна была уметь обмениваться сообщениями с веб-страницами в браузере, чтобы в том числе управлять их содержимым и как угодно взаимодействовать с ними. Расскажу о том, как удалось решить такую задачу и покажу результат работы небольшого приложения с таким взаимодействием.

Читать далее

Техники из 90-х, которые все еще работают, или процесс экспорта карт в Танки Онлайн

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели9.5K

Привет, меня зовут Артур, и я Unity-разработчик в компании «Альтернатива Гейм». 

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

Но что если ваша игра должна работать на двух абсолютно разных клиентах — устаревшем WebGL 1 и современном Unity для консолей — при этом оставаясь одной и той же игрой? Здесь заканчивается чистое искусство и начинается настоящая программистская магия.

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

Читать далее

Создаёте списки в C#? Ну тогда у вас могут быть проблемы

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

Мы все привыкли писать new List<int> { 1, 2, 3, 4 } или new int[] { 1, 2, 3, 4}, чтобы инициализировать коллекции какими-то значениями. Синтаксически это выглядит похоже, но поведение отличается, и вам следует быть осторожными, если вы заботитесь о производительности.

Читать далее

Аналитика телеметрии автосимулятора Assetto Corsa

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели9.5K

На SOC Forum у нас стоял гоночный симулятор Assetto Corsa — и мы решили сделать его не просто развлечением, а полноценным источником аналитики.

Мы подключились к Shared Memory игры, собрали данные в реальном времени, построили дашборды и придумали ачивки.

Рассказываю, как устроена телеметрия AC, как собрать её в режиме реального времени и зачем всё это понадобилось.

Читать далее

FlashcardsLoop — или как я делал свой Quizlet

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели7.9K

По традиции статей Хабра начну с описания проблемы.

Я изучаю C#, .NET, ASP.NET и ищу работу Backend-разработчика. Сейчас дело дошло до собеседований и фундаментальных вещей (синтаксис, паттерны проектирования, принципы SOLID), я понял, что информации море и она вываливается из головы.

Вспомнил про метод карточек (Flashcards), который обычно используют для иностранных языков. Пошел на популярные ресурсы: Quizlet, RemNote и прочие. Зарегистрировался, начал создавать колоды, мне понравилось, вошел во вкус и каково было мое разочарование когда я везде натыкался на платные подписки. Где-то ограниченное количество карточек, где-то постоянная реклама, где-то очень замудренный интерфейс сделанный вообще не понятно для кого (привет Anki).
Хочешь больше функций? Плати. — Хочешь учить без рекламы? Плати. — Хочешь добавить картинку? Ну, ты понял...

Я смотрел на эти интерфейсы и во мне кипела злость: «Ну это же обычное CRUD-приложение! Две таблицы в базе, простейший API. Что тут сложного? Я сам могу такое сделать!»

Так родилась идея: написать свой сервис. Бесплатный. Без ограничений. Для себя. Это и проблема решится, и пет-проект для резюме будет.

Читать далее

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

Строки кода должны помещаться на экране

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

О вечном — о разумной длине строк кода. Мы недавно встретили ошибку, которая одновременно демонстрирует, чем плох "код-колбаса", "эффект последний строки" и последствия неудачного copy-paste.

Читать далее

Поиск в личном фото архиве по текстовому описанию

Уровень сложностиПростой
Время на прочтение31 мин
Охват и читатели12K

Проиндексируем фото-видео архив для поиска на человеческом языке простыми фразами. Фраза: «новогодний праздник» найдет все фото и видео связанные с новым годом. В этом нам поможет Qwen3-VL и Qdrant.

...А заодно добавим поиск по лицу.

Читать далее

UNITY: Реализация движений для динамичного шутера

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели8.9K

Уже какое то время я разрабатываю свой first-person shooter на Unity, чья система передвижения сильно вдохновлена ULTRAKILL’ом. Изначально я начал этот проект в качестве практики и вызова самому себе, так как шутеры – это жанр максимально далёкий от моих предпочтений. В связи с этим мне пришлось изучить много нового и я хочу поделиться этими знаниями.

Читать далее

Удаляем пробелы из строки

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

Недавно мы разбирали популярную задачу — проверяли строку на наличие цифр. Еще одна популярная задача при работе со строками — удалить из них пробельные символы. Можно представить, что нам нужно очистить пользовательский ввод: удалить пробелы вначале и конце строк в имени или удалить пробелы из телефонного номера. .NET предоставляет нам несколько возможностей для решения этой задачи, давайте рассмотрим самые популярные и попробуем найти наиболее эффективные. Заодно проверим, какие изменения произошли в новой версии .NET 10.

Читать далее

Книга: «Паттерны проектирования Unity. Популярные шаблоны и лучшие практики создания игр на Unity и C#»

Время на прочтение4 мин
Охват и читатели8K

Привет, Хаброжители!

Хотите научиться писать в Unity понятный и простой в сопровождении код для игр? Тогда вы пришли по адресу! Изучение популярных паттернов проектирования Unity позволит использовать весь их потенциал при создании захватывающих проек-тов. Изучая практические примеры, вы освоите такие порождающие паттерны, как Прототип, помогающий эффективно создавать врагов, и поведенческие паттерны, например Наблюдатель, для реализации реактивной игровой механики. По мере чтения вы также научитесь замечать негативные последствия плохих архитектурных решений и справляться с ними с помощью простых, но эффективных методов.

Когда вы прочтете эту книгу, ваши приемы разработки игр в Unity изменятся. Вы не только станете более опытным разработчиком, но и научитесь использовать в работе передовые паттерны проектирования.

Читать далее

Object Pool коротко: экономим память в C# без лишнего мусора

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

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

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

Читать далее

Создаём DSL на C#

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

Создаю собственный DSL на C#: рассказываю о том, как закладывается фундамент языка и как подойти к проекту подобного масштаба.

Читать далее