Pull to refresh
12
0
Александр Протасеня @Bartez

Senior Full Stack .NET Developer (C#)

Send message

В вашем бенчмарке ещё не хватает обычного Dictionary. Было бы интересно сравнить ещё и с ним.

Я - Fullstack, но почти 7 последних лет работал чисто с Backand'ом. Сейчас возвращаюсь во Frontend. Немного шокирован как всё поменялось за эти годы. Месяц работаю с React'ом и вот у меня ровно те же мысли что и у автора! Хочу более простого/примитивного взаимодействия со state'ом, полный контроль над запуском рендринга компанента. И в целом, хочется большей прозрачности в том что происходит. Буду внимательно следить за развитием вашего проекта! Автору респект и удачи!

Житейский вопрос автору поста: какой моделью телефона/фотоаппарата сделаны иллюстрации я посту? Очень цвета насыщенные.

В абзаце с заголовком "Что такое Bento UI?" нет определения что такое Bento UI.

В WindowsXP был очень лёгкий и удобный просмотрщик изображений. С удовольствием бы им пользовался в 10-ке.

1) Какая версия .NET может использоваться в рамках проекта под .NET nanoFramework? Т.е. можно ли использовать .NET5 / C# 9.0?
2) Я так понимаю, Microsoft не имеет никакого отношения к .NET nanoFramework, верно? Если так, то есть ли у Microsoft работоспособные/перспективные альтернативы?
Не пинайте если вопросы звучат глупо, я пока совсем не в теме.
И соглашусь с комментариями, было бы ещё интересно посмотреть бенчмарки. Ждём продолжения…
Тема интересная. Может кто подготовит статью с более экстремальными результатами и подробным описанием, что получилось в итоге.
Отличная статья. С одной стороны, и так очевидно, что последний .NET Core должен быть быстрее всех прошлых версий, в том числе при работе с коллекциями. Но теперь есть пруфы и цифры. Думаю, автор сэкономил многим интересующимся людям несколько вечеров.
Но данный товарищ считает себя умнее компилятора и предлагает лепить везде принудительное встраивание.

Я даже не знаю, что на это ответить.
:-)

В разделе про Inlining, в принципе нет никаких советов и рекомендаций. Я как автор, ещё не до конца сформировал своё личное отношение к принудительному встраиванию. Как раз поэтому в статье описан лишь сам механизм, сама возможность. Всё остальное вы додумали. И на основе своих фантазий обвинили человека, вам должно быть стыдно.
Для времени, когда был актуален .NET Framework 2.0, скорее всего, всё именно так и было. Но сейчас, sealed класс с виртуальным методом даже не скомпилируется (код ошибки CS0549). Поэтому сейчас такой оптимизации нет. Лично для меня, такое поведение было ожидаемым.

Тем не менее, как раз ваш пример и подтверждает основной посыл, заложенный в 9-ом разделе. Теоретически, любое уточняющее ключевое слово может улучшить производительность, если не сегодня так завтра.
1) Отображать только 4 стоблца: Method, N, Mean, Median, Allocated.
2) Изменить цвета строк, Цвет групп запуска должен чередоваться, например белого и серого, чтоб не сливались. А метод, с наименьшими значениями по 3-м столбцам (Mean, Median, Allocated) — выделять цветом.

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

Если вы знаете, как реализовать вышеописанное, буду очень благодарен.
Прошу прощения за ошибку в названии метода, не «ForArray», а «ToArray».
у вас ошибка — там имелось в виду ToArray, а не ForArray?
Да, вы правы. Поздно заметил, не успел исправить комментарий. В полном коде бенчмарка, приведённого выше, ошибка в названии метода уже исправлена.
Код бенчмарка:

public class ListvsArrayBenchmark
{
	private const int VALUE = 1;

	private IEnumerable<int> _source;

	[Params(1000, 10000, 100000, 1000000)] public int N;

	[GlobalSetup]
	public void Setup()
	{
		_source = Enumerable.Repeat(0, N).Select(x => VALUE);
	}

	[Benchmark]
	public List<int> ToList()
	{
		return _source.ToList();
	}

	[Benchmark]
	public int[] ToArray()
	{
		return _source.ToArray();
	}
}

Не забудьте поделиться своими результатами запуска.
Ссылку на оригинальный пост Microsoft не нашёл. Лет 5 назад попадалась статья с рекомендациями, когда нужно использовать Dictionaty. Цифра условная (для Capacity по умолчанию, с каким-нибудь простым ключом, типа int). Основной смысл 6-го раздела в том, что на очень малом кол-ве элементов, Dictionary результата не даст, так же как и с малым соотношением добавлений к поиску в рамках критичного кода.
Число «8» встречал где-то в оф. документации Microsoft, попробую сейчас найти ссылку.
KvanTTT, спасибо за информативный комментарий! +1, именно такой фидбек я очень люблю! Про выравнивание enum'ов не знал, это не противоречит статье, однако с этой точки зрения я даже не оценивал.

А вот по рекомендациям Игоря Лабутина не всё так очевидно. Возможно, в его докладе фигурировала более старая версия .NET. Или наоборот, его доклад был по .NET Core 3 Preview. Или иная причина расхождения результатов.

Если запустить простой бенчарк, то по времени выполнения мы получим эквивалентный результат, нельзя выявить победителя. А вот по выделению памяти ToArray стабильно расходует меньше.

Всё верно! Но так обычно не делают — небезопасно. Например, в данном случае connceton к БД может быть закрыт до того, как данные реально попадут в слой представления. И это не единственная причина. Нельзя представлению никак влиять на БД. В случае возврата IQueryable объекта, такая возможность есть.
Странный вопрос…
Почему вас удивляет то, что я считаю культовыми фильмы «Сибирский цирюльник», «Утомлённые солнцем 1/2»?

Если бы я сказал что считаю шедевром “Самый лучший фильм” у вас наверное таких вопросов не было бы…

Минусуйте сколько хотите мне кармы не жалко.
Упомянутый вами «Утомленные солнцем 2» очень достойное кино.
Не стоит негодование по поводу Михалковской инициотивы нолага на болванки перекладывать на его фильмы.
Вклад Михалкова в современное русское кино сложно переоценить.

Information

Rating
Does not participate
Location
Минск, Минская обл., Беларусь
Date of birth
Registered
Activity