局部变量与实例变量

Bla*_*sen 5 .net c# optimization local instance

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

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

但不久之前,我在另一篇StackOverflow帖子(我似乎无法找到它的位置)上读到,局部变量存储在访问速度快得多的内存中,并且每次设置实例变量时,在分配新值之前,必须将先前的值擦除为繁琐的额外步骤.

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

哪个更好?

Ada*_*rth 2

就我个人而言,我不会将其视为性能问题的罪魁祸首(除非您不断传递大struct参数)。我天真的理解是,GC 压力是 XNA 游戏通常考虑的因素,因此基本上要节俭你的对象实例。

如果变量是方法局部变量,则值本身或引用(当引用类型时)将位于堆栈上。如果将它们提升为类成员变量,它们将位于堆上的类内存中。

从技术上讲,方法调用会变得更快,因为您不再在调用中复制引用或值(因为如果该方法也是类的本地方法,那么您可能可以从方法中删除参数)。

我不确定相对性能,但对我来说,如果您需要保留该值,那么该值在类中是有意义的......

在我看来,两者之间的微妙差异似乎抵消了做一件事有利于另一件事的任何潜在收益 - 使它们大致相当或差异如此之小以至于不关心。

当然,面对性能分析的硬数据,所有这些都需要得到纠正。