Все потоки
Поиск
Написать публикацию
Обновить
274.81

C# *

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

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

Как LINQ, только быстрый и без аллокаций

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

Кому не нравится LINQ в C#? Встроенная и уже достаточно старая фича языка C# и рантайма .NET.

Но можем ли мы сделать более эффективную версию LINQ, чтобы и быстрее, и не кушало памяти? Давайте попробуем!

Читать далее

Visual Studio 2022

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

У меня захватывающие новости - этим летом выйдет первая общедоступная предварительная версия Visual Studio 2022.

Следующий крупный выпуск Visual Studio будет более быстрым, доступным и легким, предназначенным как для учащихся, так и для тех, кто создает решения промышленного масштаба. Впервые Visual Studio будет 64-разрядной. Пользовательский интерфейс будет более чистым, интеллектуальным и ориентированным на действия.

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

Читать далее

Как ‌С#-разработчик у JavaScript плохому учился

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


Недавно мне на глаза попалась одна статья на Хабре. В ней сравниваются C# и JavaScript. На мой взгляд, сравнивать их — всё равно что сравнивать луну и солнце, которые, если верить классику, не враждуют на небе. Эта статья напомнила мне о другой публикации. В ней речь идёт о сценариях неожиданного и неочевидного поведения JavaScript, а C# не упоминается от слова совсем, но живое любопытство сподвигло меня попытаться повторить подобное поведение на другом языке.
Читать дальше →

Многопоточность в .NET: когда не хватает производительности

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


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

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

Под катом — видео и расшифровка моего доклада с конференции DotNext, где я разбираю несколько примеров, когда использование средств из стандартной библиотеки .NET (Task.Delay, SemaphoreSlim, ConcurrentDictionary) привело к просадкам производительности, и предлагаю решения, заточенные под конкретные задачи и лишённые этих недостатков.

Некоторые аспекты оптимизации LINQ-запросов в C#.NET для MS SQL Server

Время на прочтение6 мин
Количество просмотров24K
LINQ вошел в .NET как новый мощный язык манипуляции с данными. LINQ to SQL как часть его позволяет достаточно удобно общаться с СУБД с помощью например Entity Framework. Однако, достаточно часто применяя его, разработчики забывают смотреть на то, какой именно SQL-запрос будет генерировать queryable provider, в вашем случае — Entity Framework.
Читать дальше →

Проверяем исходный код Roslyn

Время на прочтение22 мин
Количество просмотров7.9K
PVS-Studio vs Roslyn

Время от времени мы возвращаемся к проектам, которые уже проверяли ранее с помощью PVS-Studio и писали про это статьи. Делать это интересно по двум причинам. Во-первых, чтобы понять, насколько лучше стал наш анализатор. Во-вторых, чтобы отследить, обратили ли авторы проекта внимание на нашу статью, а также на отчет об ошибках, который мы им обычно предоставляем. Конечно, ошибки могут быть исправлены и без нашего участия. Но всегда приятно, когда именно наши усилия помогают сделать какой-то проект лучше. Не стал исключением и Roslyn. Предыдущая статья о проверке этого проекта датируется 23 декабря 2015 года. Это довольно давно, учитывая путь, который за это время проделал в своём развитии наш анализатор. Дополнительный интерес лично для нас Roslyn представляет ещё и тем, что на нём базируется ядро C# анализатора PVS-Studio. Таким образом, мы очень заинтересованы в качестве кода этого проекта. Устроим ему повторную проверку и выясним, что же нового и интересного (но будем надеяться, что ничего существенного) там сможет найти PVS-Studio.
Читать дальше →

Асинхронный рассинхрон: антипаттерны в работе с async/await в .NET

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

Кто из нас не косячит? Я регулярно встречаюсь с ошибками в асинхронном коде и делаю их сам. Чтобы прекратить это колесо Сансары делюсь с вами самыми типичными косяками из тех, которые иногда довольно сложно отловить и починить.



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

Ищем ошибки в Mono: сотни их

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


Крупные проекты проверять интересно. Как правило, в них удаётся найти различные интересные ошибки и рассказать о них людям. Также это хороший способ тестирования нашего анализатора и улучшения различных его аспектов. Я давно хотел проверить 'Mono', и наконец-то такая возможность появилась. И, стоит сказать, проверка себя оправдала, так как удалось найти много занимательного. О том, что же нашлось, какие нюансы возникли при проверке, и будет эта статья.
Читать дальше →

«Roslyn — еще очень сырая технология» — интервью с Сергеем Шкредовым, руководителем .NET-направления в JetBrains

Время на прочтение24 мин
Количество просмотров31K
Привет, это снова Без слайдов. Я Алексей Федоров, и на этот раз в гостях у меня побывал Сергей Шкредов, руководитель всего .NET-направления в компании JetBrains.



С Сергеем мы говорили:
  • о последних релизах ReSharer;
  • о новой схеме подписок и лицензий;
  • про непростые отношения с Microsoft;
  • о рантайме и развитии языка;
  • о том, как поменял ситуацию выход Roslyn;
  • о работе с фидбеком пользователей для улучшения продукта;
  • о планах развития других продуктов .NET стека;
  • о важности внутриотраслевого общения и обмена опытом;
  • про разработку продуктов для С++;
  • немного о ReSharper C++, на который должны подсесть даже разработчики Microsoft;
  • О том, как пользователи почувствуют изменения;
  • Как ReSharper будет развиваться дальше.


Вот видео



Под катом — текстовый вариант интервью.

Читать интервью...

Про модель, логику, ООП, разработку и остальное

Время на прочтение29 мин
Количество просмотров112K
Часто ли вы задумываетесь – почему что-то сделано так или иначе? Почему у вас микросервисы или монолит, двухзвенка или трехзвенка? Зачем вам многослойная архитектура и сколько у вас вообще слоев? Что такое бизнес-логика, логика приложения, презентационная логика и почему все так разделено? Посмотрите на свое приложение – как оно вообще спроектировано? Что в нем и где находится, почему это сделано именно так?
Потому что так написано в книжках или так говорят авторитетные личности? Какие ВАШИ проблемы решает тот или иной подход/паттерн?
Даже то, что на первый взгляд кажется очевидным, порой бывает очень сложно объяснить. А иногда, в попытке объяснения, приходит понимание того, что очевидные мысли были и вовсе ошибочны.
Давайте попробуем взять какой-нибудь пример и изучить на нем эти вопросы со всех сторон.
Читать дальше →

Что Mono 4.0.0 нам готовит

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


В последнее время многие обсуждают недавние открытие CoreCLR и CoreFX от Microsoft. Напомню, что ядро CLR и реализация базовых классов .NET у нас теперь открытые, кроссплатформенные и распространяются под MIT. Таким образом, вы можете собрать свою собственную версию рантайма, которая будет работать под Windows, Linux и Mac. И многих терзал вопрос: а что же теперь будет с Mono? Недавно появились черновики Mono 4.0.0 Release Notes, из которых мы можем узнать о будущих планах компании Xamarin. Итак, сегодня в номере:
  • Adoption of Microsoft’s open source code
  • Floating point optimizations
  • We dropped support for the 2.0, 3.5 and 4.0 assemblies
  • Updated IKVM
Обсудим грядущие изменения чуть подробней.
Читать дальше →

Задачник.NET

Время на прочтение3 мин
Количество просмотров122K
Этот пост предназначается всем любителям платформы .NET и языка C#. Думаю, многие встречали на просторах сети разнообразные задачки на понимание тех или иных особенностей платформы или языка. Я большой любитель подобных задачек и головоломок. Они помогают глубже понять определённые области и повысить собственные программистские навыки. Однажды я решил сделать подборку подобных задачек, чтобы можно было показывать другим людям и обсуждать нюансы работы с .NET/C#. Когда задачек накопилось достаточное количество, появилась новая мысль — оформить мою подборку в виде книжки. Вашему вниманию предоставляется текущий вариант этого сочинения под названием «Задачник.NET».

Cover
Читать online
Скачать PDF-версию
Исходные коды на GitHub
Читать дальше →

Обзор нововведений в C# 12

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

Уже середина осени, а это значит, что новая версия C# на пороге. Самое время узнать, какие изменения настигнут язык совсем скоро. Хоть количество нововведений в этот раз уступает предыдущим релизам, интересных среди них немало.

Читать далее

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

Сказка про For vs Foreach

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


Ходят слухи, что foreach быстрее for. А ещё ходят слухи, что for быстрее foreach. Пора разобраться, что быстрее!

Читать далее

.NET, что с тобой происходило в 2021?

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

Конец декабря, многие подводят свои итоги, а мы решили оглянуться и посмотреть, что хорошего (и не очень) случилось в мире .NET-разработки за этот год, и спросили об этом наших разработчиков.

Из хорошего называли появление рекордов в С# 9, и выход С# 10, а в топе, конечно же, релиз .NET 6 с долгосрочной поддержкой. До выхода шестой версии у нас уже много веб-сервисов работало на .NET 5, в том числе и в монолите. Теперь ко всем «фишкам» пятой версии добавляются преимущества новой.

Платформа становится всё кросплатформеннее и кросплатформеннее (возможно, благодаря этому в последнее время наблюдается рост интереса к C#). В .NET 6 сильно улучшилась производительность, появилась поддержка Apple Silicon (мы недавно писали, почему так рады этому), новые API и много других полезностей.

Что ещё запомнилось

WinUI 3 — Новая эра разработки под Windows

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

В этой статье:

- WinUI 3 - это не просто новая версия библиотеки пользовательских компонентов. Это изменит разработку ПО под Windows и не только.
- Как менялась разработка графических интерфейсов?
- Эволюция системных API пошла не по плану....
- В чём провал Universal Windows Platform?
- Что такое .NET, и почему за ним будущее?

Читать далее

Череда проблем длиною в 16 лет

Время на прочтение12 мин
Количество просмотров11K
Не так давно, на заре этого тысячелетия, холодным ноябрьским днем 2004го я сел писать эмулятор сервера для некой онлайн игры. Писалось мне весьма хорошо, на радующем глаз C# и .Net Framework версии 1.1. Особых целей перед собой я не ставил, а опыт имел сравнительно небольшой. По какой-то причине сообщество оценило эту поделку (может, потому что она появилась раньше официального старта основной игры?) и через несколько месяцев я столкнулся с взрывным ростом онлайна, а заодно и серьезными проблемами производительности. Проект прожил 6+ лет, достиг заметных высот (2500 онлайна в пике, порядка 20000 MAU), а затем и почил в бозе. И вот спустя полтора десятилетия я решил сделать собственную ММО игру на тех же “проверенных временем” наработках и столкнулся с аналогичными же проблемами, не смотря на то, что они были уже единожды мною решены.
Читать дальше →

Ленивая инициализация в C#

Время на прочтение4 мин
Количество просмотров35K
Отложенная инициализация или «ленивая» инициализация — это способ доступа к объекту, скрывающий за собой механизм, позволяющий отложить создание этого объекта до момента первого обращения. Необходимость ленивой инициализации может возникнуть по разным причинам: начиная от желания снизить нагрузку при старте приложения и заканчивая оптимизацией редко используемого функционала. И действительно, не все функции приложения используются всегда и, тем более, сразу, потому создание объектов, реализующих их, вполне рационально отложить до лучших времён. Я хотел бы рассмотреть варианты ленивой инициализации, доступные в языке C#.
Читать дальше →

Распознаём дату и время в естественной речи

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


Задача


Привет, Хабр! Увлёкся я навыками для Алисы и стал думать, какую пользу они бы могли принести. На площадке много разных прикольных игр (в том числе мои), но вот захотелось сделать рабочий инструмент, который действительно нужен в голосовом исполнении, а не просто копирует существующего чат-бота с кнопками.


Голос актуален тогда, когда либо руки заняты, либо нужно выполнять много последовательных операций, особенно на экране телефона. Так возникла идея навыка, который по одной команде выделяет из текста указание на дату и время и добавляет событие с этим текстом в Google Calendar. Например, если пользователь скажет Послезавтра в 11 вечера будет красивый закат, то в календарь на послезавтра в 23:00 уходит строка Будет красивый закат.


Под катом описание алгоритма работы библиотеки Hors: распознавателя даты и времени в естественной русской речи. Хорс — это славянский бог солнца.


Github | NuGet

Unity: бесконечный процедурно генерируемый город, получаемый при помощи алгоритма WFC (коллапс волновой функции)

Время на прочтение7 мин
Количество просмотров27K
Привет, Хабр!

Как законодатели мод по теме Unity на российском рынке предлагаем вам почитать интересное исследование о практическом использовании алгоритма WFC (Wave Function Collapse), построенного по образу и подобию известного принципа квантовой механики и очень удобного при процедурной генерации уровней в играх. Ранее на Хабре уже публиковался подробный рассказ об этом алгоритме. Автор сегодняшней статьи Мариан Кляйнеберг рассматривает алгоритм в контексте трехмерной графики и генерации бесконечного города. Приятного чтения!

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

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