数组访问比模除更快吗?

问题描述

| 我不知道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+次,否则我不会担心