我不知道int数组查找有什么开销。哪个会表现更好(在C#中):
a = aLookup[i];
b = (a % 6) == 5;
c = (b ? a+1 : a-1) >> 1; // (a + 1) / 2 or (a - 1) / 2
或者
a = aLookup[i];
b = bLookup[i];
c = cLookup[i];
数组查找实际上会为b
或c
节省那么多时间吗?
编辑:我用几种方式描述了它。结果是数组查找速度提高了近四倍。
答案 0 :(得分:3)
极不可能重要。你应该选择最具可读性的东西。我可以告诉你那个
c = (b ? a+1 : a-1) >> 1;
毫无意义,因为您没有购买任何性能,但您的代码可读性较差。只需明确地除以两个。
那就是说,如果你真的在乎,可以在个人资料中自己尝试一下。
答案 1 :(得分:1)
两者都是概念上的O(1),尽管您对数组访问进行了越界检查。
我认为这不会成为你的瓶颈,我会选择更具可读性并更好地展示你的意图。
答案 2 :(得分:0)
A:
B:
答案 3 :(得分:0)
如果您使用反射器来检查%运算符的实现 你会发现这是非常低效的,不能用于高频代码中的时间关键应用程序,因此csharp游戏程序员倾向于避免%并使用:
while (x >= n) x -= n;
但他们可以对x的范围做出假设(在调试版本中验证) 除非你每秒做10,000多个这样的事情我不会担心它