为什么roslyn在把对象放入数组时要把对象包装在结构体中

本文关键字:对象 包装 结构体 roslyn 为什么 数组 | 更新日期: 2023-09-27 18:05:29

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

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

这是出于对性能的考虑吗?内存开销?

为什么roslyn在把对象放入数组时要把对象包装在结构体中

这可能是出于性能原因。参见Jon Skeet的文章。

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