Почему roslyn обертывает объекты в структурах при вводе массивов?
Прочитав исходный код Roslyn на GitHub, я заметил, что используется ObjectPool<T>
. класс. Он используется для уменьшения издержек памяти.
Внутри он использует массив для хранения объединенных объектов.
Я не понимаю, почему он использует частную структуру с именем Element
, содержащую одно поле типа T
как элемент массива, вместо того, чтобы просто использовать T
.
Разве это не касается производительности? Накладные расходы памяти?
Ответы
Ответ 1
Это может быть по соображениям производительности. См. эту статью Джона Скита.
Подводя итог, массивы типов значений являются инвариантными в С#, что означает, что среда выполнения может избежать проверки совместимости при хранении элементов в массиве. В этой статье г-н Скит использует структуру оболочки, аналогичную той, которую вы описали, и показывает улучшение производительности записи в массиве.