c#为方便起见,我应该存储一个字段的副本吗?

时间:2014-04-25 14:55:04

标签: c#

我养成了有时做这件事的习惯,我想知道为什么要这样做,有什么优势吗?

以下是Unity3d游戏的一个例子。 在我的课堂上,我想用浮动ThingYposition进行各种计算等等,这是一个存储在Thing.transform.position.y某处的字段。而不是多次编写Thing.transform.position.y,我只是在程序开头复制我想要的浮点数。

public GameObject Thing; 
private float ThingYposition;

public Start()
{
    ThingYposition = Thing.transform.position.y
}

public Update()
{
    //Do stuff every frame with ThingYposition
}

所以这种方式意味着我的代码行会稍微混乱,但程序将使用更多的内存,因为我现在存储了两次浮点数。但它会更快吗?访问像Thing.transform.position.y这样深度嵌入的字段实际上是否使用了比访问我的浮点字段更多的处理能力? 你认为这是无害的习惯还是应该停止?

另请注意,在这个例子中,我根本不关心原始的变化,我不想改变它。

2 个答案:

答案 0 :(得分:1)

你已经说过你不在乎原件是否有所改变,所以我会跳过那一部分。我能看到的唯一优势是在多线程环境中。您不必担心另一个线索与Thing混在一起,因为您拥有ThingYposition的私人副本。

在效率方面,您可以在这里进行微观优化。如果您遇到问题,请对其进行分析并尝试替代方案。但我无法想象这是你真正需要担心的事情。

答案 1 :(得分:0)

由于您不关心原始位置是否发生变化而且不会自行更改,因此这可能是您所描述的用例的最佳方法。

问题的其他部分的答案是,访问本地与“深度嵌入字段”的速度更快取决于Thing.transform.position.y的实施方式。如果它只是一个成员字段,那么本地副本或“深度嵌入字段”的访问时间基本相同。如果在每次访问时计算Thing.transform.position.y,则本地副本会更快。