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

C# *

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

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

Сколько памяти нужно в 2024 году для выполнения миллиона конкурентных задач?

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

Помните сравнение потребления памяти для асинхронного программирования на популярных языках 2023 года?

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

Давайте снова проведём бенчмарки и изучим результаты!

Читать далее

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

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

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

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

От первокурсника до программиста: история 4 лет обучения в ВУЗе на программиста

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

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

Читать далее

Как Visual Studio 2022 съела 100 Гб памяти и при чём здесь XML бомбы?

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

0865_VS2022_XMLBomb_ru/image1.png


В апреле 2021 года Microsoft анонсировала новую версию своей IDE – Visual Studio 2022, попутно объявив, что она будет 64-битной. Сколько мы этого ждали — больше никаких ограничений по памяти в 4 Гб! Однако, как оказалось, есть нюансы...

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

Графический пароль не дает смотрящему украсть себя

Время на прочтение3 мин
Количество просмотров39K
В этой статье расскажу про свой дипломный проект на тему «Иконографический способ аутентификации пользователя. Можно ли пройти аутентификацию так, чтобы стоящий рядом человек, следя за вашими действиями, так и не смог пройти аутентификацию за вас». В этой публикации кратко расскажу, в чём суть проекта.

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

Dependency Injection контейнеры .NET, допускающие полиморфное поведение

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


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

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

Однако стандартный DI контейнер платформы долгое время не давал этой возможности.

В рамках этой статьи я решил напомнить альтернативы для решения этой задачи на тот случай, если вы ещё не успели переехать на .NET 8 или работаете в каком-нибудь Иннотехе, где в наличии только зеркало NuGet-пакетов, выпущенных до начала 2022 года.
Читать дальше →

Ассемблерные вставки… в C#?

Время на прочтение9 мин
Количество просмотров37K
Итак, эта история началась с совпадения трёх факторов. Я:

  1. в основном писал на C#;
  2. лишь примерно представлял, как он устроен и работает;
  3. заинтересовался ассемблером.

Эта, на первый взгляд, невинная смесь породила странную идею: а можно ли как-то совместить эти языки? Добавить в C# возможность делать ассемблерные вставки, примерно как в C++.

Если вам интересно, к каким последствиям это привело, — добро пожаловать под кат.


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

Проверка исходного кода библиотек .NET Core статическим анализатором PVS-Studio

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

Picture 19

Библиотеки .NET Core — один из самых популярных C# проектов на GitHub. Неудивительно, с учётом его широкой известности и используемости. Тем интереснее попробовать выяснить, какие тёмные уголки можно найти в исходном коде этих библиотек, что мы и попробуем сделать с помощью статического анализатора PVS-Studio. Как думаете, удалось ли в итоге обнаружить что-нибудь интересное?
Читать дальше →

Оптимизация сборки мусора в высоконагруженном .NET сервисе

Время на прочтение16 мин
Количество просмотров33K
Ежедневно в сервисе Pyrus работают десятки тысяч сотрудников из нескольких тысяч организаций по всему миру. Отзывчивость сервиса (скорость обработки запросов) мы считаем важным конкурентным преимуществом, так как она напрямую влияет на впечатление пользователей. Ключевой метрикой для нас является «процент медленных запросов». Изучая ее поведение, мы заметили, что раз в минуту на серверах приложений возникают паузы длиной около 1000 мс. В эти промежутки сервер не отвечает и возникает очередь из нескольких десятков запросов. О поиске причин и устранении узких мест, вызванных сборкой мусора в приложении, пойдет речь в этой статье.


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

Джеффри Рихтер приезжает в Россию: анонс конференции DotNext 2018 Moscow

Время на прочтение5 мин
Количество просмотров9.6K
Задумайтесь на минутку: что за последний год произошло с .NET? Что изменилось, что из этого мы должны использовать? Можно даже отложить эту статью и подумать, ведь вопрос более чем достойный. Мы сами попробовали и потратили на него не один час.

В этом году ответить на него сложней, чем обычно. С одной стороны, есть масса громких, но очень поверхностных или высокоуровневых новостей, например: в Microsoft теперь связывают будущее компании с облаками и искусственным интеллектом, а не платформой Windows. Но что с того толку обычному разработчику? Разве четыре года назад все уже не писали под облака?

В этой реальности нам приходится каждый раз делать совершенно новую программу DotNext. Чтобы сделать новую программу — нам нужны новые люди. Старые и известные люди в .NET, совершенно новые на DotNext. Например, этой осенью к нам приедет автор CQRS — Грег Янг.




Узнаете эти книги? «CLR via C#», написанная Джеффри Рихтером — настольная книга многих .NET-разработчиков, а «Windows Internals» Павла Йосифовича — одна из самых известных книг про Windows-разработку вообще. Кстати, в этом году вышло уже 7-е издание! Хотите узнать, как пообщаться с авторами этих книг и побывать на их докладах? Добро пожаловать под кат!
Читать дальше →

Моноиды, полугруппы и все-все-все

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

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


Mark Seeman расскажет о функциональном программировании просто и быстро. Для этого он начал писать цикл статей, посвященных связи между паттернами проектирования и теорией категорий. Любой ООПшник, у которого есть 15 минут свободного времени, сможет заполучить в свои руки принципиально новый набор идей и инсайтов, касающихся не только функциональщины, но и правильного объектно-ориентированного дизайна. Решающим фактором является то, что все примеры — это реальный код на C#, F# и Haskell. Этот хабрапост — перевод самого начала цикла, первых трех статей, слитых воедино для удобства понимания.


Кроме того, с Марком можно пообщаться вживую, посетив конференцию DotNext 2017 Moscow, которая состоится 12-13 ноября 2017 г. в Москве, в «Славянская Рэдиссон». Марк прочитает доклад на тему «From dependency injection to dependency rejection». Билеты можно взять здесь.

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

Релиз Mono 4.0 с импортом кода из referencesource.microsoft.com и corefx

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

— Сделали поддержку C# 6 по-умолчанию
— Потюнили в плане улучшения производительности GC и рантайм
— Ускорили операции с float на 30-40%
— Добавили поддержку PowerPC64 LE
— И, самое главное импортировали очень большой кусок BCL из .NET Framework.
Список импортированного кода

Ядро .Net (GC, JIT, interop, ...) в Open Source

Время на прочтение5 мин
Количество просмотров37K
Мы рады сообщить что CoreCLR теперь находится на github и теперь вы имеете доступ ко всем его исходным кодам. CoreCLR является средой исполнения .NET Core, выполняя такие функции как сборку мусора или компиляции в конечный машинный код. .Net Core – это модульная реализация .Net, которая может быть использована как база для огромного количества сценариев, масштабы которых варьируются от простых консольных утилит до веб-приложений, хостящихся в облаке. Чтобы понять, чем отличается .Net Core от .Net Framework, посмотрите на пост «Введение в .Net Core»

Теперь вы можете скачивать исходники CoreCLR, бранчеваться, и делать pull requests, также вы можете компилировать его прямо на своем ПК. Мы выпустили полную и актуальную реализацию CoreCLR, которая включает RyuJIT, .Net GC, родной Interop и множество других компонент .Net runtime. Данный релиз следует тем же принципам, что и все наши последние релизы библиотек, вышедших в open-source: сделать весь .Net Framework open sourced.

Сегодня ядро .Net компилируется и отрабатывает (видимо имеется в виду CI) на Windows. Мы добавим имплементации для специфических для Mac и Linux платформенных вещей в ближайшие пару месяцев. Также мы уже имеем некоторый специфический для Linux код в .Net Core, однако мы только начали портировать с Windows на остальные платформы. Напротив, мы хотели открыть исходные тескты с самого начала, чтобы вы вместе с нами пропутешествовали бы к другим платформам, возможно, внося свой вклад.
Читать дальше →

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

Откуда растут руки у GetHashCode в .NET

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

Введение


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

Что хранится в объектах помимо их полей?


Начнем нашу статью с того, что узнаем что хранится у объектов ссылочного типа помимо их полей.

У каждого объекта ссылочного типа есть так называемый заголовок (Header), который состоит из двух полей: указатель на тип которым является данный объект (MethodTablePointer), а так же индекс синхронизации (SyncBlockIndex).
Читать дальше →

Delta-Rle-Huffman (DRH) Texture Format

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

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

Внимание! В статье много картинок.

Кому интересно, добро пожаловать под кат!

Медленная сборка кода с .NET Roslyn: как найти и устранить причину

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

.NET разработчики знают, что такое ждать сборки кода. Работать при этом невозможно: пока не увидишь, как обновится приложение, — не перейдешь к следующему шагу. А переключиться на другую задачу за это время не успеешь. Получается, если в день переписать код 5 раз, можно потерять полчаса при сборке, а то и больше.

Теперь на примере платформы автоматизации маркетинга Mindbox. Основное программное решение — это монолит на C#: несколько миллионов строк, 50 проектов, над которыми одновременно работают десятки команд. Даже сэкономленная при сборке минута выливается в кучу продуктивных человеко-часов. Поэтому, когда речь зашла о переходе всей компании на MacBook в будущем, мы решили выяснить, как это отразится на производительности.

Читать далее

Elite: Dangerous и CosmosDB

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

image


o7 cmdr!


Теплым карантинным вечером, в одном из телеграмных чатиков по Elite: Dangerous разгорелась дискуссия на тему: а у какого типа звезд чаще всего встречаются землеподобные планеты?


Дело в том, что исследование планет является одной из основных механик игры. А в иерархии полезности планет, землеподобные стоят на самом верху. Но и редкость их довольно высока. Так что командеры захотели узнать: на какие звезды прежде всего обращать внимание, при перемещении по млечному пути?


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

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

Длинная арифметика от Microsoft

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

Введение


Известно, что компьютер может оперировать числами, количество бит которых ограниченно. Как правило, мы привыкли работать с 32-х и 64-х разрядными целыми числами, которым на платформе .NET соответствуют типы Int32 (int) и Int64 (long) соответственно.

А что делать, если надо представить число, такое как, например, 29! = 8841761993739701954543616000000? Такое число не поместится ни в 64-х разрядный, ни тем более 32-х разрядный тип данных. Именно для работы с такими большими числами существует длинная арифметика.

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

Погружаемся в глубины C# dynamic

Время на прочтение5 мин
Количество просмотров77K
Одним из наиболее заметных дополнений в C# 4 является dynamic. Об этом рассказано много и не раз. Но всегда выпускается из виду DLR (Dynamic Language Runtime). В данной статье мы рассмотрим внутреннее устройство DLR, работу самого компилятора, а также дадим определение понятиям статически-, динамически- типизированный язык со слабой и сильной типизациями. И, конечно же, не останется без внимания техника PIC (Polymorphic Inline Cache), используемая, например, в Google V8 engine.
Читать дальше →

Декомпилятор от JetBrains: релиз dotPeek 1.0

Время на прочтение2 мин
Количество просмотров63K
imageДобрый день, хабровчане! Бесплатный декомпилятор и менеджер сборок от JetBrains ушел в народ – несколько дней назад на нашем сайте стал доступен официальный релиз dotPeek 1.0.

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

Основные возможности dotPeek 1.0 таковы:

  • Декомпиляция сборок .NET Framework 1.0-4.5 в эквивалентный код на C#. Поддерживаются библиотеки (.dll), исполняемые файлы (.exe), а также файлы метаданных Windows 8 (.winmd). Кроме того, dotPeek умеет искать сборки в каталогах, которые вы ему указываете, и открывает разного рода архивы: как .zip, так и родственные форматы .vsix и .nupkg.
Читать дальше →

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