gpt4 book ai didi

c# - 局部变量与实例变量

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

我一直在为我使用 XNA 构建的游戏进行大量 C# 优化研究,但我仍然不太明白局部变量是否是实例变量在不断更新和使用时是否能提供更好的性能。

根据 http://www.dotnetperls.com/optimization ,你应该避免参数和局部变量,这意味着实例变量是性能方面的最佳选择。

但不久前,我在另一篇 StackOverflow 帖子中读到(我似乎找不到它在哪里)局部变量存储在内存的一部分,访问起来要快得多,而且每次实例变量已设置,在分配新值之前,必须作为一个繁琐的额外步骤删除先前的值。

我知道在设计方面,在这种情况下使用实例变量可能会破坏封装,但我对性能非常好奇。目前在我的游戏中,我将局部变量传递给类中 7 个方法中的 3 个,但我可以轻松地将变量提升为实例变量,并且能够完全避免参数传递和局部变量。

那么哪个更好呢?

最佳答案

您的变量是引用(类或字符串)类型还是值(结构)类型?

对于引用类型,将它们作为方法参数传递和将它们保存在对象实例上之间没有任何有意义的区别。在第一种情况下,当进入函数时,参数将(对于具有小参数计数的函数)结束在寄存器中。在第二种情况下,引用作为“this”在内存中指向的数据的偏移量存在。这两种情况都是快速获取内存地址,然后从内存中取出相关数据(这是昂贵的部分)。

对于值类型,以上内容适用于某些 类型(可以放入您的 CPU 寄存器中的整数或 float )。对于那些特定的东西,按值传递可能比从“this”中提取它们要便宜一些。对于其他值类型(DateTime 或您自己创建的结构或任何具有多个成员的结构),当数据太大而无法通过寄存器传递时,这不再重要。

不过,这对您的应用程序(甚至是游戏)的性能影响不大。大多数常见的 .NET 性能问题(不仅仅是低效算法)将以某种形式来自垃圾生成。这可以通过意外装箱、字符串构建使用不当或对象生命周期管理不善(您的对象的生命周期既不是很短也不是很长/永久)表现出来。

关于c# - 局部变量与实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11684289/

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