Обновить

Комментарии 6

1. Код, который выполняется до Main

.cctor, не? С классическим TypeInitializerException?

В 21-м месте библиотеки классов. Например, ArgumentNullException.ThrowIfNull:

Штука прикольная и в некоторых местах прям очень интересная, но я предпочитаю избегать stackwalk при проверке на null (Старая привычка с шаблонов в C++):

_ = value ?? throw new ArgumentNullException(nameof(value));

_privateField = argumentValue ?? throw new ArgumentNullException(nameof(value));

var methodResult = InvokeSomeMethod(arg1, arg2)
  ?? throw new InvalidOperationException(nameof(value));

Спасибо за внутрянку :)

Да, он самый — .cctor модуля и исключение оборачивается в TypeInitializerException.

Про ?? throw. Да как бы рабочее но по замерам там нет особой разницы, чистая мелочь 0,3944 против 0,3969 нс.

По поводу скорости, то есть ещё атрибут:

[MethodImpl(MethodImplOptions.AggressiveInlining)]

Но я его на проде ни разу не видел. Т.к. в момент появления он был "на будущее".
И так его все и забыли...

Там это уже на откуп конткретному CLR, а там уже как карта ляжет, по аналогии с Мьютексами на *nix машинах.

Хм, он и в дотнете повсюду, "ну и мы тоже"

...главное помнить, что он ничего не гарантирует. И размер кода на горячем пути можно раздуть до неприличия.

"С++ сложен и небесопасен для бизнеса. Вот придет .Net и все будет хорошо, зачем вам указатели и работать с памятью ?" говорили они в 1999 ...2001 году. Как сейчас помню 😳🧐 Прошло всего-то 20+ лет...
Такого наворотили, мама не горюй..

Разве кто то Вас заставляет всё это использовать в своих программах? Как по мне, 99% написанного в "А чё, так можно было?" это для "чтения на ночь" - что бы спалось лучше. IMHO, вряд ли это когда то пригодится в реальной жизни. Согласен с ZetaTetra - спасибо автору за описание таких тонкостей.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации