Почему структура в Unity может быть медленнее класса
Что проверяют
Понимаете ли вы семантику значимых типов глубже лозунга про стек и кучу, и можете ли назвать конкретные места, где структура теряет своё преимущество.
Как отвечать
Структура выигрывает там, где её не копируют лишний раз: массив структур лежит в памяти одним куском, хорошо ложится в кэш процессора и не создаёт работы сборщику мусора. Медленнее класса она становится в нескольких ситуациях.
Копирование. Значимый тип копируется целиком при передаче в метод, возврате, присваивании и при чтении через свойство или индексатор. Большая структура, которую гоняют по вызовам в цикле, проигрывает ссылке размером в машинное слово. Лечится in, ref readonly и объявлением readonly struct: у неизменяемой структуры компилятор не делает защитных копий.
Упаковка. Приведение структуры к object или к интерфейсу создаёт объект в куче, то есть ровно ту аллокацию, ради отсутствия которой структуру и выбрали. Типичные места: аргумент метода с параметром object, ключ словаря без IEquatable<T>, перебор через IEnumerable<T> вместо конкретного типа.
Сравнение. Если у структуры не переопределены Equals и GetHashCode, работает реализация по умолчанию, а она в общем случае медленная и вдобавок упаковывает операнд.
В Unity к этому добавляется то, что Vector3 и Quaternion это структуры, а transform.position возвращает копию: писать в её поле бесполезно, изменения накапливают в локальной переменной и присваивают целиком.
Где спотыкаются
Повторяют, что структура всегда лежит на стеке. Поле структуры внутри класса, элемент массива, захваченная лямбдой переменная живут в куче; место хранения задаёт контекст, а не вид типа.
Второе: делают структуру изменяемой, а потом ищут, куда пропали изменения. Менялась копия: элемент List<T>, значение свойства, аргумент метода. Мутабельное состояние лучше держать в классе.
Третье: объясняют разницу через сборщик мусора наоборот, будто классы нагружают его меньше. Всё ровно обратно: массив структур это одна аллокация, массив классов это ссылки плюс отдельный объект на каждый элемент.