为什么 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 先生使用了一种类似于您描述的包装器结构,并显示了对数组的写入性能的改进。
在阅读 Roslyn on GitHub, I noticed the much used ObjectPool<T>
class 的源代码时。它用于减少内存开销。
它在内部使用 an array 来存储合并的对象。
我不明白的是为什么它使用一个名为 Element
的私有结构,其中包含一个 T
类型的字段作为数组元素,而不是仅使用 T
.
这是出于对性能的考虑吗?内存开销?
可能是性能原因。参见 this article by Jon Skeet。
总而言之,值类型数组在 C# 中是不变的,这意味着运行时可以避免在数组中存储项时进行兼容性检查。在这篇文章中,Skeet 先生使用了一种类似于您描述的包装器结构,并显示了对数组的写入性能的改进。