访问时是否有阵列克隆?

时间:2011-06-03 20:51:16

标签: c# .net arrays performance xna

我正在阅读XNA库代码并在类型VertexPositionColor内,他们用CA2105:ArrayFieldsShouldNotBeReadOnly消息来理解“每次使用时克隆数组的性能成本太高了。”< / p>

public struct VertexPositionColor
{
    public static readonly VertexElement [ ] VertexElements;
}

但为什么在使用它时会被复制?这仅适用于访问的属性/字段为ValueType的结构,对吧?

2 个答案:

答案 0 :(得分:3)

我猜他们证明了他们比其他任何事情更多地暴露了array field这一事实,而他们这样做的根本原因是绩效:

他们可能想到的另一种选择是array field私有,property公开IEnumerable或返回array的副本<{1}}加入的时间。

EDIT。编辑了一点答案,使我想说的更清楚:p。

答案 1 :(得分:1)

在大多数情况下,他们最好使用Array.AsReadOnly并返回通用的ReadOnlyCollection。根据O(1)操作的文档。

在当前实现中,调用者可以更改数组中的值(直接修改static / global 状态)。

阅读Framework Design Guidelines的另一个原因 - 它为您提供了FxCop建议背后的原因。