gpt4 book ai didi

c# - 创建结构值的性能

转载 作者:太空狗 更新时间:2023-10-29 21:29:25 24 4
gpt4 key购买 nike

我目前正在阅读 Oreilly 的 Learning XNA 4.0,我注意到作者倾向于创建结构值,例如 Vector2Rectangle 多次,不考虑性能。

例如,检查两个游戏实体之间碰撞的 SquareCollision() 方法会在每次调用时创建两个 Rectangle,而不是简单地让每个游戏实体拥有自己的 Rectangle 字段并在不创建任何更多结构值的情况下比较字段。

我在很多地方多次看到这种模式,这让我想知道:
在 C# 中是否可以忽略结构值的创建?
这真的属于微优化部分吗?

也许因为我的经验主要是使用 Java,ValueType 的概念对我来说很陌生,但是从一个结构体(并​​调用它的构造函数)多次重新创建一个值似乎是一个巨大的资源浪费。

最佳答案

创建一个在堆栈上短暂使用的结构非常便宜,并且与仅为所有这些值设置局部变量没有太大区别,但使用组件化。但是,作为对象的一部分,它将是每个对象相同数据的额外副本。

这两种方法都有效,具体取决于场景。然而,在堆栈上,没有真正的资源成本。作为对象的一部分,您需要确保没有不必要地复制数据,因为这会产生实际成本。

如果它是一个对象的属性,您需要多次复制它。

如果它是对象上的一个字段,是的:它可以就地使用而无需复制,但是:在大多数情况下这相对较小。

与往常一样,您需要进行分析才能知道它是否重要。

关于c# - 创建结构值的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9253312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com