Чтобы ответить на вторую часть вопроса, речь идет об использовании их в качестве ключа словаря.
Скорость использования чего-либо в качестве словарного ключа сводится к тому, как функция GetHashCode работает для этого типа. Для ссылочных типов, таких как записи, стандартное поведение .Net использует Object.GetHashCode
, который "вычисляет хеш-код на основе ссылки на объект" , которая является эффективной числовой операцией.
Более сложным поведением по умолчанию для типов значений, которое является структурой, является ValueType.GetHashCode
"метод базового класса использует отражение для вычисления хеш-кода на основе значений полей типа." таким образом, чем сложнее структура и, в зависимости от ее полей, вычисление хэша может занять лот дольше.