Подтвердить что ты не робот

Почему roslyn обертывает объекты в структурах при вводе массивов?

Прочитав исходный код Roslyn на GitHub, я заметил, что используется ObjectPool<T>. класс. Он используется для уменьшения издержек памяти.

Внутри он использует массив для хранения объединенных объектов. Я не понимаю, почему он использует частную структуру с именем Element, содержащую одно поле типа T как элемент массива, вместо того, чтобы просто использовать T.

Разве это не касается производительности? Накладные расходы памяти?

4b9b3361

Ответ 1

Это может быть по соображениям производительности. См. эту статью Джона Скита.

Подводя итог, массивы типов значений являются инвариантными в С#, что означает, что среда выполнения может избежать проверки совместимости при хранении элементов в массиве. В этой статье г-н Скит использует структуру оболочки, аналогичную той, которую вы описали, и показывает улучшение производительности записи в массиве.