问题描述
|
我不知道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
或ѭ3save节省那么多时间吗?
编辑:我介绍了几种方法。结果是数组查找的速度几乎快了四倍。
解决方法
A:
取决于
元素类型
数组长度
缓存位置
处理器相似性,二级缓存大小
缓存持续时间(或更重要的是:直到逐出缓存为止使用了多少次?)
B:
您需要...个人资料! (什么是一些好的.NET Profiler?)
, 这是非常不可能的。您应该选择最易读的内容。我可以告诉你
c = (b ? a+1 : a-1) >> 1;
毫无意义,因为您没有购买任何性能,但是代码的可读性较差。只需将其明确除以二即可。
也就是说,如果您真的很在意,请在探查器中亲自尝试一下。
, 从概念上讲,两者都为O(1),尽管您对数组访问权限进行了越界检查。
我认为这不会成为您的瓶颈,我会选择更具可读性的内容,并更好地表明您的意图。
, 同样,如果您使用反射器检查%运算符的实现
您会发现它效率极低,并且不能在高频代码的时间紧迫的应用程序中使用,因此csharp游戏程序员倾向于避免%并使用:
while (x >= n) x -= n;
但他们可以对x的范围做出假设(已在调试版本中得到验证)
除非您每秒要完成10,000+次,否则我不会担心