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

Why does roslyn wrap objects in structures when put in arrays?

在阅读 Roslyn on GitHub, I noticed the much used ObjectPool<T> class 的源代码时。它用于减少内存开销。

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

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

可能是性能原因。参见 this article by Jon Skeet

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