К старту курса о разработке на C# делимся переводом статьи о типичных ошибках программирования на C# от Кристофа Насарре — технического рецензента книг Microsoft Press в целом и, конечно, книги CLR via C# в частности. Кроме того, Кристоф Насарре — один из авторов книги Windows via C++.
Пользователь
CancellationTokenSource и «утечки памяти»
Всем привет!
Я работаю в Тинькофф, в проекте «Тинькофф Телефония». Наша основная задача — организация IP-телефонии внутри компании и за ее пределами. В день через нас проходит несколько миллионов звонков. Всей этой кухней занимаются около 10 сервисов.
В какой-то момент мы столкнулись с проблемой: во время релиза сервисы останавливаются неприлично долго. Нас это печалило, поэтому мы приняли решение прокидывать везде и всюду CancellationToken.
Чуть позже столкнулись с другой проблемой: все наши сервисы начали потихоньку пожирать доступную память. Не так чтобы слишком сильно и быстро, но в целом в перспективе нескольких недель — заметно.
В один прекрасный день терпение лопнуло, и мы с Женей Мишустиным и Кириллом Марковым накинулись на эту проблему: Женя с Кириллом ловили и анализировали дампы, а я занимался поиском причин такого поведения.
В этой статье хочу рассказать о том, какой интересный подводный камень таит в себе CancellationTokenSource и как это связано с нашими «утечками» памяти.
Я принес вам решение проблемы с исключениями в C#. Но вам не понравится
Я каждый день пишу код на сишарпе, и натыкаюсь на одну проблему: я трачу кучу времени на то, чтобы решить, как быть, если что-то идёт не по плану.
У меня есть приличный опыт работы с другими языками программирования, и стандартный подход по работе с ошибками в C# мне не нравится. Но языки и платформы устроены так, что ты решаешь проблемы не как считаешь нужным, а так, как принято.
Эти размышления меня измучили, и я систематизировал свои знания и идеи по обработке исключительных случаев.
Детский ReactJS из 135 строк кода
Одна методика изучения позволила мне понять устройство многих сложных программных систем и сводится к тому, что нужно переписать изучаемый проект так, чтобы получился какой нибудь неведомый зверь, который хотя бы чуть-чуть шевелился и был в чем-то схож со своим прообразом.
Performance in .NET Core
Performance in .NET Core
Всем привет! Данная статья является сборником Best Practices, которые я и мои коллеги применяем на протяжении долгого времени при работе на разных проектах.
Intel Core i5-8250U CPU 1.60GHz (Kaby Lake R), 1 CPU, 8 logical and 4 physical cores
.NET Core SDK=3.0.100
[Host]: .NET Core 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
Core: .NET Core 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
[Host]: .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT
Core: .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT
Job=Core Runtime=Core
ToList vs ToArray and Cycles
Сценарии использования и производительность Blazor Server в .NET Core 3.0
Сoncurrent collections за 10 минут
Photo by Robert V. Ruggiero
Тема не новая. Но задавая вопрос “что такое concurrent collections и когда их использовать?” на собеседовании или code review, я почти всегда получаю ответ, состоящий из одного предложения: “они полностью защищают нас от race conditions” (что невозможно даже в теории). Или: “это как обычные коллекции, но там внутри все на lock-ах”, что тоже не совсем соответствует действительности.
Цель данной статьи — разобрать тему за 10 минут. Будет полезно для быстрого знакомства с некоторыми тонкостями. Или чтобы освежить память перед собеседованием.
Привет, люди с аутистическими нарушениями
В смысле, привет, Хабр! Если вы можете сказать про себя слово «интроверт» (как и я) то вас, скорее всего, можно заносить в эту категорию. Другое дело, что категория, мягко говоря, размыта. И в неё от души навалено сразу несколько синдромов.
Но сначала главное. Итак, есть версия, что мозг приматов развился до невероятных высот рода Homo из-за социальных взаимодействий. Это когда надо думать за себя, потом как вон та обезьяна-вожак, потом его ближайшее окружение, потом как все омеги (можно посчитать их за одного, ладно), нужно продумать действия, понять, что они сделают в ответ, учесть, что они могут предсказать такой ход наших мыслей. В общем, кончается это рекурсией и высокой вычислительной сложностью. Механизмы, позволяющие прогнозировать реакции других — начиная от зеркальных нейронов — так плотно в нас вшиты, что если мы посмотрим видео про зубного и его пациента, то почувствуем сами отголосок его реакции.
Плюс отклонений аутистического спектра — это когда вся вот эта мощность, направленная на выявление тысяч закономерностей в социальной жизни, была переброшена на что-то другое. Например, на анализ сложных систем в математике или разработке. Или на теоретическую физику. Или на музыку. Или на искусство. Гипотеза, разумеется, пока не так чтобы очень доказуемая, и не факт, что эта «мощность» была вообще. Но, тем не менее, этой моделью легко пользоваться, рассуждая про лёгких аутистов.
А теперь давайте разбираться в деталях.
Многопоточность в .NET: когда не хватает производительности
Платформа .NET предоставляет множество готовых примитивов синхронизации и потокобезопасных коллекций. Если при разработке приложения нужно реализовать, например, потокобезопасный кэш или очередь запросов — обычно используются эти готовые решения, иногда сразу несколько. В отдельных случаях это приводит к проблемам с производительностью: долгим ожиданием на блокировках, избыточному потреблению памяти и долгим сборкам мусора.
Эти проблемы можно решить, если учесть, что стандартные решения сделаны достаточно общими — они могут иметь избыточный в наших сценариях оверхед. Соответственно, можно написать, например, собственную эффективную потокобезопасную коллекцию для конкретного случая.
Под катом — видео и расшифровка моего доклада с конференции DotNext, где я разбираю несколько примеров, когда использование средств из стандартной библиотеки .NET (Task.Delay, SemaphoreSlim, ConcurrentDictionary) привело к просадкам производительности, и предлагаю решения, заточенные под конкретные задачи и лишённые этих недостатков.
Инструментарий для анализа и отладки .NET приложений
Заглянуть «под капот» кода или посмотреть на внутреннее устройство CLR можно с помощью множества инструментов. Этот пост родился из твита, и я должен поблагодарить всех, кто помог составить список подходящих инструментов. Если я пропустил какие-то из них, напишите в комментариях.
Во-первых, я должен упомянуть, что хороший отладчик уже присутствует в Visual Studio и VSCode. Также существует множество хороших (коммерческих) профилировщиков .NET и инструментов мониторинга приложений, на которые стоит взглянуть. Например, недавно я попробовал поработать с Codetrack и был впечатлён его возможностями.
Однако оставшийся пост посвящён инструментам для выполнения отдельных задач, которые позволят лучше понять, что происходит. Все инструменты имеют открытый исходный код.
Нейросеть в стекле. Не требует электропитания, распознаёт цифры
Все мы знакомы с такой способностью нейронных сетей, как распознавание рукописного текста. Основы этой технологии существуют уже много лет, но, лишь относительно недавно, скачок в области компьютерных мощностей и параллельной обработки данных позволили сделать из этой технологии очень практичное решение. Тем не менее, это практичное решение, в основе своей, будет представлено в виде цифрового компьютера многократно изменяющего биты, точно так же, как и при выполнении любой другой программы. Но в случае с нейронной сетью, разработанной исследователями из университетов Wisconsin, MIT, и Columbia, дело обстоит по-другому. Они создали стеклянную панель, не требующую собственного электропитания, но при этом способную распознавать рукописные цифры.
Советские мечты о будущем
Помните очаровательного котика, которые чихал в заставке советского мультфильма? Мы помним, и нашли его — вместе с ворохом другой рисованной фантастики. В детстве она пугала и обескураживала, поскольку поднимала серьезные, взрослые темы. Настала пора пересмотреть старые мультфильмы, чтобы узнать, о каком будущем мечтали в той стране.
Чего мне никогда не говорили о CSS
Фото Джантин Дурнбос на Unsplash
Это ни в коем случае не критика коллег, а всего лишь краткий список важных вещей, которые я самостоятельно узнала о CSS в последнее время.
Не секрет, что многие разработчики, похоже, не думают о CSS. Это легко заметить по обсуждениям в интернете и в разговорах с друзьями и коллегами. Тем не менее, многие знания мы получаем именно от коллег, и иногда я понимаю, что о некоторых важных нюансах CSS мне никто не рассказал, потому что люди просто не тратят время на изучение этой темы.
Чтобы исправить это, я провела некоторые исследования и составила небольшой список понятий, которые считаю интересными и полезными для лучшего понимания и написания CSS.
Как подступиться к fullstack-разработке сегодня, если ты проспал десять лет
Привет, Хабр! Несколько месяцев назад у меня остро встал вопрос смены профиля деятельности и я обнаружил, что для претендента на вакансию web-разработчика сейчас недостаточно навыков десятилетней давности (какая неожиданность!). Пришлось срочно актуализировать свои знания. Заодно я решил составить шпаргалку с описанием большинства современных технологий, чтобы в случае чего кидать жаждущим новых знаний линк на эту статью, да и самому не забывать.
System.IO.Pipelines: высокоэффективный IO в .NET
Стоит ли сохранять длину массива в локальную переменную в C#
var length = array.Length;
for (int i = 0; i < length; i++) {
//do smth
}
Пишут они это в надежде ускорить цикл, думая что создавая локальную переменную избавляют CLR от необходимости вызывать каждый раз геттер для Array.Length. Я решил раз и навсегда для себя понять стоит так делать или можно сэкономить своё время и написать без временной переменной.
Oracle Certified Associate и Oracle Certified Professional. Общее впечатление и нюансы подготовки
Меня зовут Маша, я работаю в КРОК. Сегодня я хочу рассказать вам о получении сертификатов Oracle Certified Associate и Oracle Certified Professional.
Вообще, в спорах о полезности профессиональной сертификации (да и ее необходимости в принципе) среди разработчиков довольно часто ломаются копья. Некоторые уверены, что для найма на приличную работу сертификат крайне желателен. Другие говорят, что “бумажки” не играют особой роли, даже диплом о высшем образовании может не потребоваться, оценивать будут исключительно навыки.
Бывают случаи (вероятно, если процесс собеседования не очень отлажен), когда HR может отсеять человека без сертификата, хотя такой человек на самом деле более чем справился бы с работой. Или, наоборот, среагировать на наличие сертификата, устроить техническое собеседование с разработчиком, который, правда, быстро поймет, что кандидат вообще зашел случайно, и начнет подозревать, что кроме сдачи сертификата он ничего не изучал и не использовал в работе.
Как бы то ни было, есть люди, которым сертификаты нужны. Как для портфолио, так и для себя лично. Под катом я поделюсь впечатлениями от сертификации Oracle по Java: Oracle Certified Associate (1Z0-808) и Oracle Certified Professional (1Z0-809). В мировой практике наличие этих сертификатов является подтверждением определенного уровня квалификации java-разработчика, поэтому многие эту процедуру проходят.
Укрощение XBRL: заметки аналитика
В объем надзорной (статистической) отчетности входит информация об учредителях и клиентах, объектах страхования, премиях и выплатах, депозитах и инвестициях, о контрагентах и т.д. и т.п. — реально сотни тысяч фактов. В связи с этим, для облегчения бюрократизма и соблюдения точности процедуры, расскажем о проекте автоматизации формирования отчетности в XBRL одной крупной НФО, в основу которого легло решение Fujitsu XBRL.
Новый MTProto-прокси сервер от Telegram
Обновлённая поддержка прокси-серверов в клиентах Telegram
Инструкция по обходу блокировки Telegram. Как активировать SOCKS 5
Информация
- В рейтинге
- Не участвует
- Откуда
- Пермь, Пермский край, Россия
- Дата рождения
- Зарегистрирован
- Активность