【问题标题】:Independent Variables and Array performance [closed]自变量和数组性能[关闭]
【发布时间】:2015-05-30 16:24:29
【问题描述】:

我想知道什么更优化,一个 N 个私有整数变量,或者一个包含 N 个整数值的数组。

【问题讨论】:

  • 如果你能在完全人工测试之外的任何东西中测量差异,我会感到惊讶。
  • 您的问题不清楚,没有多大意义,请重新表述。
  • 我同意理查德的观点:如果你可以写 n 个私有整数,那么长度为 n 的数组可能不足以产生任何影响。我怀疑只有当 n 的长度至少为 5-6 位时,您才能开始测量性能差异。
  • 我不会担心这样做会过早优化。编译器将为您处理这些细节,因此您可以专注于业务逻辑。如果稍后证明性能确实是一个问题,那么它将是可衡量的,届时您将能够隔离并处理它。
  • 另一件值得注意的事情是,你不应该提前过多地关注私有事物的微观效率。即使您关心效率,这些东西是私有的这一事实意味着您可以获取分析器并将它们更改为您心中的内容,而无需重写整个代码库。如果有任何效率方面值得提前考虑,那就是你的接口如何在你的代码库的其余部分将使用的 public 部分中工作。在那里你不一定能轻易改变主意。

标签: c# arrays performance variables unity3d


【解决方案1】:

当您使用数组时,这是一个加号间接。数组将被分配在内存的一个单独部分,所以当你第一次访问它时,你的代码首先获取它的地址,然后它才能读出它的内容。它还需要一些索引,但这由 CPU 完成得非常快。但是,.NET 是一个安全的环境,它会检查您是否使用了有效的数组索引。它增加了额外的时间。 当您使用单独的变量时,这些变量将包含在您的对象实例中,并且不需要间接。此外,不需要索引绑定检查。 此外,您不能很好地命名数组的第 N 个元素,但您可以为各个变量命名。所以你的代码将是可读的。 正如其他人提到的,您不应该进行这种优化,编译器/抖动会处理它。编译器知道几个常见的用例,并为此制定了优化策略。如果您开始做一些棘手的事情,编译器将无法识别您的意图并且无法为您进行优化。

【讨论】:

  • 谢谢,我会保持我的代码可读性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 2013-03-28
相关资源
最近更新 更多