在阅读 Roslyn on GitHub 的源代码时, 我注意到经常使用 ObjectPool<T>
类(class)。它用于减少内存开销。
在内部它使用 an array存储池中的对象。
我不明白的是为什么它使用一个名为 Element
的私有(private)结构包含类型为 T
的单个字段作为数组元素,而不是仅仅使用 T
.
这是出于对性能的关注吗?内存开销?
最佳答案
可能是出于性能原因。参见 this article by Jon Skeet .
总而言之,值类型数组在 C# 中是不变的,这意味着运行时可以避免在数组中存储项时进行兼容性检查。在这篇文章中,Skeet 先生使用了一种类似于您描述的包装器结构,并展示了对数组的写入性能的改进。
关于c# - 为什么 roslyn 在放入数组时将对象包装在结构中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31709401/