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

标签 c# arrays struct roslyn

在阅读 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/

相关文章:

c# - 在运行时创建的控件的访问值

c# - MVC4 捆绑缓存 header

sql - 从 json[] 中删除了最后一个元素?

VB.NET:将 CSV 文件读入二维数组

c++ - 段错误 - 从指针到指针的 printf 值

c - 如何将 strtok 返回的指针中的数据存储到结构中而不丢失?

c# - 检查对象是否为空的最佳和最快方法

java - 将数组写入文件

c - 结构困惑

c# - asp 中继器复选框状态保留