Так, вроде докопался до сути. Если просто прикопать персону
var personCopy = person; [Benchmark]
public bool SimpleCodeScenario()
{
var personCopy = person;
return personCopy != null && personCopy.Name != null && personCopy.Age < 9;
}То ничего не изменится. Но если добавить каст к объекту, то производительность выправится
[Benchmark]
public bool SimpleCodeScenarioWithCast()
{
var personCopy = person;
return (object)personCopy != null && personCopy.Name != null && personCopy.Age < 9;
}🅰️А если долго смореть IL код, то (IL код начнет смотреть в ответ) можно увидеть, что вот такой вариант, приведением к объекту приводит к тому, что объект person кладется на стек всего один раз, а в случае с отсутствием такого каста, при каждой проверке условия объект будет класться на стек заново. То есть в первом случае его положат на стек аж три раза, а во втором случае всего один.
Дело раскрыто, ducktective Димас удоляется на выходные. 🦆
P.S.: И, да, какой же топовый инструмент sharplab.io! Без него в таком душном деле, как без рук. Всем советую.
#бенчмарки