为什么roslyn在放入数组时将对象包装在结构中?

Waz*_*ner 11 c# arrays struct roslyn

在GitHub上阅读Roslyn的源代码时,我注意到了很常用的ObjectPool<T>类.它用于减少内存开销.

在内部,它使用数组来存储池化对象.我不明白为什么它使用一个名为Element包含单个字段类型的私有结构T作为数组元素,而不仅仅是使用T.

这是出于对性能的关注吗?内存开销?

Kyl*_*yle 14

这可能是出于性能原因.请参阅Jon Skeet撰写的这篇文章.

总而言之,值类型数组在C#中是不变的,这意味着运行时可以避免在数组中存储项时进行兼容性检查.在文章中,Skeet先生使用了与您描述的类似的包装器结构,并显示了对阵列的写入性能的改进.