我对使用 XNA 构建的游戏的 C# 优化进行了大量研究,但我仍然不太明白局部变量是否是实例变量,在不断更新和使用时会提供更好的性能。
根据http://www.dotnetperls.com/optimization http://www.dotnetperls.com/optimization,您应该避免参数和局部变量,这意味着实例变量是性能方面的最佳选择。
但不久前,我在另一篇 StackOverflow 文章中读到(我似乎找不到它在哪里),局部变量存储在访问速度更快的内存部分中,并且每次设置实例变量时,在分配新值之前,必须删除先前的值,这是一个繁琐的额外步骤。
我知道在设计方面,在这种情况下使用实例变量可能会破坏封装,但我对性能非常好奇。目前在我的游戏中,我将局部变量传递给类中 7 个方法中的 3 个,但我可以轻松地将变量提升为实例变量,并且能够完全避免参数传递和局部变量。
那么哪个会更好呢?
您的变量是引用(类或字符串)类型还是值(结构)类型?
对于引用类型,将它们作为方法参数传递和将它们保存在对象实例上没有任何有意义的区别。在第一种情况下,当进入函数时,参数(对于参数数量较少的函数)将最终存放在寄存器中。在第二种情况下,引用作为“this”在内存中指向的数据的偏移量而存在。这两种情况都是快速获取内存地址,然后从内存中提取相关数据(这是昂贵的部分)。
对于值类型,上述情况成立certain类型(适合 CPU 寄存器的整数或浮点数)。对于那些特定的东西,按值传递可能比从“this”中提取它们要便宜一些。对于其他值类型(DateTime 或您可能自己创建的结构或任何具有多个成员的结构),当数据太大而无法通过寄存器传递时,这不再重要。
不过,这对于应用程序(甚至是游戏)的性能来说不太可能。最常见的 .NET 性能问题(不仅仅是低效的算法)在某种程度上来自垃圾生成。这可以通过意外装箱、字符串构建使用不当或对象生命周期管理不当(您的对象的生命周期既不是很短也不是很长/永久)来体现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)