Как стать автором
Обновить
60.68
Рейтинг

.NET *

Хаб со знаниями про .NET

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

Сортировки в C#: OrderBy.OrderBy или OrderBy.ThenBy? Разбираемся, что эффективнее и почему

Блог компании PVS-Studio Программирование *.NET *C# *

Предположим, есть задача: нужно отсортировать коллекцию по нескольким ключам. В C# это можно сделать с помощью вызовов OrderBy().OrderBy() или OrderBy().ThenBy(). Но в чём разница между этими вызовами? Чтобы ответить на этот вопрос, придётся покопаться в исходниках.


0991_OrderBy_ThenBy_ru/image1.png


Статья состоит из трёх основных разделов:


  • Предыстория. Для тех, кто любит затравки. История о том, откуда вообще возникла идея провести исследование и изучить, в чём разница между OrderBy().OrderBy() и OrderBy().ThenBy().
  • Сравнение эффективности. Изучаем отличия типов сортировок с точки зрения производительности и потребления памяти.
  • Отличия в поведении. Погружаемся в исходники .NET и разбираемся, из-за чего возникают отличия в эффективности работы рассматриваемых способов сортировки.
Читать дальше →
Всего голосов 25: ↑25 и ↓0 +25
Просмотры 4.2K
Комментарии 10

Новости

Экономим на Azure SQL Databases

.NET *SQL *IT-инфраструктура *Microsoft Azure *DevOps *

Всем привет! В данной статье я расскажу о том, как наша компания смогла сэкономить за счет внедрения Azure SQL Elastic Pool. Дополнительно будут примеры Azure REST API для энумерации SQL Servers, для энумерации SQL databases и для получения метрик.

Самые пытливые в конце статьи узнают сэкономленную величину. Здесь исходники

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Просмотры 1.1K
Комментарии 0

Введение в ARFoundation

Блог компании OTUS .NET *C# *Unity *
Tutorial

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

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Просмотры 645
Комментарии 0

Использование GitHub в обучении студентов. Автоматизация проверок. Часть I

.NET *C# *GitHub *Учебный процесс в IT DevOps *
Tutorial

В конце декабря 2020 года я написал несколько статей на Хабре по своему опыту использования GitHub в обучении студентов (ссылки на них будут в конце сей статьи).

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

Для меня при обучении программированию важно, чтобы студенты умели не только правильно решать задания, но и красиво писать код. В обучении и проверки заданий я использую EditorConfig, dotnet cli и GitHub Actions. Но обо всём по порядку.

Читать далее
Всего голосов 7: ↑7 и ↓0 +7
Просмотры 2K
Комментарии 0

PowerShell, HTML Agility Pack: получение значения атрибута HTML-элемента

Программирование *.NET *PowerShell *C# *
Tutorial

Рассмотрено два способа получения значения атрибута HTML-элемента на HTML-странице в скрипте на языке PowerShell с помощью методов объектов из библиотеки HTML Agility Pack.

Показан прямой доступ к значениям атрибутов с помощью выражения вида $node.Attributes. Далее большая часть статьи посвящена методам GetAttributeValue из библиотеки HTML Agility Pack. Освежаю в памяти, что такое «полиморфизм» и как он реализован в библиотеке для данного метода. Также будет немного затронуто понятие «обобщенного метода» («generic method») в языке C#.

Читать далее
Всего голосов 1: ↑1 и ↓0 +1
Просмотры 715
Комментарии 0

Как я портирую код с помощью Hebron

Open source *.NET *C *C# *

В своей предыдущей статье я упомянул Hebron - утилиту для портирования кода с C на C# или на Rust.

В этой статье хотелось бы подробно расписать - как я с ней работаю.

Написанное можно воспринимать как своего рода мануал на тот случай, если кто-нибудь тоже захочет что-нибудь портануть.

Итак, портирование осуществляется в 4 шага:

Читать далее
Всего голосов 15: ↑15 и ↓0 +15
Просмотры 3.2K
Комментарии 3

Вероятно вам не нужен MediatR

Программирование *.NET *C# *ООП *
Перевод

MediatR - это очень популярная библиотека, которая используется для уменьшения зависимостей между объектами. Она популяризует архитектуру, основанную на крайне значимых принципах проектирования:

препятствование прямому общению между объектами для уменьшения связности;

нацеливание на Message-Oriented архитектуру;

поддержка асинхронного внутреннего обмена сообщениями;

ориентирование на переиспользование объектов.

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

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

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

Также стоит отметить, что эта статья не покрывает положительные аспекты библиотеки, а фокусируется только на недостатках.

Читать далее
Всего голосов 16: ↑16 и ↓0 +16
Просмотры 5.5K
Комментарии 12

Предварительная версия C# 11: обощённые типы для ML, обязательные члены и многое другое

Блог компании SkillFactory Open source *Программирование *.NET *C# *
Перевод


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

Узнать больше
Всего голосов 11: ↑8 и ↓3 +5
Просмотры 6.6K
Комментарии 24

Секретики Unity3d. Зачем нужен флаг STARTER_ASSETS_PACKAGES_CHECKED в стартовых ассетах

.NET *Разработка игр *C# *Unity *

Кто устанавливал офицальные ассеты от Unity "Starter Assets - Third Person Character Controller" или "Starter Assets - First Person Character Controller" возможно замечал что в настройках проета (Project settings -> Player -> Other settings -> Script Compilation) появляется флаг STARTER_ASSETS_PACKAGES_CHECKED, но зачем он нужен? Давайте разбираться.

Читать далее
Всего голосов 7: ↑5 и ↓2 +3
Просмотры 1.2K
Комментарии 7

Мой вклад в электронный документооборот

.NET *C# *

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

Читать дальше →
Всего голосов 4: ↑4 и ↓0 +4
Просмотры 3.7K
Комментарии 8

StbSharp: история ненужного проекта

.NET *Разработка игр *C *C# *Unity *
Из песочницы

В этой статье я бы хотел рассказать о своем хобби проекте под названием StbSharp.

Итак, в 2016 году мне пришла в голову весьма банальная идея - сделать собственный игровой кросс-платформенный движок на C#. И я озаботился поиском кросс-платформенной же библиотеки для загрузки картинок. Внезапно выяснилось, что подходящей просто не существовало. Было множество платформо-зависимых решений(напр. System.Drawing). А так же имелась SixLabors.ImageSharp. Но она была в состоянии ранней альфы. Мне же хотелось работать с решением, проверенным временем. Так я пришёл к идее портировать stb_image.h (очень популярной в геймдеве single-header библиотеки для загрузки картинок) на C#.

"А разве не легче было написать биндинги для нативной библиотеки? Хоть для той же stb_image?",- задаст справедливый вопрос читатель. Да, легче. И правильнее. О чём, собственно, и говорит заголовок этой статьи. Конечно, использование биндингов доставляет некоторые неудобства в плане того, что необходимо доставить соответствующий нативный бинарник на устройство конечного пользователя. Однако эти неудобства с лихвой окупаются достоинствами. А именно лучшим перформансом и портируемостью.

Однако, проект показался мне столь интересным, что я проигнорировал эти справедливые возражения.

Читать далее
Всего голосов 37: ↑37 и ↓0 +37
Просмотры 5.5K
Комментарии 23

Как подружить Canvas и ItemsSource в WPF и AvaloniaUI

.NET *C# *
Tutorial

Предпосылки: понимая, что контейнеры компоновки в WPF не позволяют сделать привязки (Binding) к своим дочерним элементам, решил поэкспериментировать, а как же всё-таки подсунуть данные из View Model для формирования содержимого в эти самые контейнеры компоновки. Позже аналогичное решение было сделано для AvaloniaUI.

Кроме того, я стал регулярно обращать внимание на то, что подобные вопросы появлялись в телеграме в чатах pro.net и AvaloniaUI (RU), поэтому своё решение опубликовал на гитхабе. Но вопросы продолжают появляться регулярно, что и сподвигло меня написать статью на Хабре с пошаговым разбором, что делать.

Итак, если Вас эта тема заинтересовала, добро пожаловать под кат.

Читать далее
Всего голосов 12: ↑12 и ↓0 +12
Просмотры 1.4K
Комментарии 8

Опыт использования AutoFixture для генерации gRPC сообщений

.NET *TDD *C# *
Из песочницы

Думаю, большинство читателей согласится, что автоматизированное тестирование - полезный, а во многих областях даже необходимый, этап создания программ. А так как программисты - народ ленивый, то и инструментов, облегчающих этот этап существует немало. Одним из таких инструментов является AutoFixture - средство для генерации тестовых экземпляров. Этот инструмент уже не раз упомянался на Хабре, например тут. Далее я расскажу о том, с какой проблемой столкнулся в попытке применить AutoFixture в своей работе и как решил эту проблему.

Читать далее
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 1.6K
Комментарии 2

Поиск коммитов в Azure DevOps

.NET *Microsoft Azure *

Всем привет! Я расскажу о том как можно написать простой поиск коммитов в Azure DevOps. Те кто не любит много букв, могут сразу перейти к коду. Зачем же понадобился свой "велосипед" в дополнение к стандартному поиску?

Читать далее
Всего голосов 2: ↑2 и ↓0 +2
Просмотры 409
Комментарии 0

Поваренная книга миграции данных между БД или как перенести данные из одной БД в другую с минимальной болью

PostgreSQL *.NET *SQL *C# *
Из песочницы

Одно я могу сказать точно: миграция данных между двумя БД - это одна из, если не самая сложная часть при смене СУБД или схемы базы данных. И что-то мне подсказывает, что Вы не фанат громоздких, чрезвычайно трудно отлаживаемых, SQL конструкций.

Читать далее
Всего голосов 12: ↑7 и ↓5 +2
Просмотры 7.9K
Комментарии 13

Генерация псевдослучайных чисел в программировании. И как у меня псевдо-получилось их сгенерировать

Python *.NET *Алгоритмы *C# *
Из песочницы

Немного о генерации случайных чисел в рамках программирования. Для новичков.

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

Читать далее
Всего голосов 14: ↑7 и ↓7 0
Просмотры 7.8K
Комментарии 19

Соберёмся? Вторая проверка проекта MSBuild

Блог компании PVS-Studio .NET *C# *Системы сборки *

MSBuild – популярная сборочная платформа с открытым исходным кодом от Microsoft, которую используют разработчики по всему миру. В далёком 2016 году мы уже проверяли проект при помощи PVS-Studio и нашли несколько подозрительных мест. Давайте посмотрим, что удалось обнаружить в коде MSBuild при повторной проверке.

Читать далее
Всего голосов 11: ↑9 и ↓2 +7
Просмотры 1.6K
Комментарии 0

Создание графического бота для EVE Online

.NET *Алгоритмы *C# *Игры и игровые консоли
Из песочницы

В один прекрасный день, стреляя по NPC в космосе, мне стало интересно, а смогу ли я этот рутинный процесс немного автоматизировать.

Выводить в консоль «Привет, мир!» я уже умел.
Теоретическое представление, что нужно делать, так же имелось.
Оставалось дело за малым - реализовать задумку.

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

Включить варп-двигатель!
Всего голосов 22: ↑22 и ↓0 +22
Просмотры 9K
Комментарии 33

Первые шаги в Unity с OpenXR

Блог компании OTUS .NET *Разработка игр *C# *Unity *
Tutorial

Привет! Сегодня мы создадим VR-проект на Unity, работающий по стандарту OpenXR. 

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

Читать далее
Всего голосов 8: ↑7 и ↓1 +6
Просмотры 1.4K
Комментарии 4

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

Работа

.NET разработчик
71 вакансия