Rya*_*s91 1 c# comparison performance lookup-tables multiplication
在我的应用程序中,我有一个非常大的字节数组,它是一个扁平的3维数组,我们使用3个嵌套for循环(x,y,z)填充数组,然后我们通过使用一点点数学得到我们想要的值,最具体地说:
要获取数组中的索引:
return x + z*SizeX + y*SizeX*SizeZ;
Run Code Online (Sandbox Code Playgroud)
并给出索引返回x/y/z坐标:
int index = pos;
var y = (ushort) (pos/SizeX/SizeZ);
pos -= y*SizeX*SizeZ;
var z = (ushort) (pos/SizeX);
pos -= z*SizeX;
var x = (ushort) pos;
return new BlockPos(x, y, z, index, this);
Run Code Online (Sandbox Code Playgroud)
首先,我会想象第二个可以提高效率,我只是不知道该怎么做,任何帮助都会受到赞赏:P
我的主要问题是,对于我来说,为y和x值创建一个查找表(在加载类时填充)会更快吗?或者将乘法放在那里更快?
编辑 在某些情况下,这个数学被称为很多,所以如果它更快,即使是更长的启动,它也会使差异变得更好.
在大多数语言和体系结构中,乘法将成为一个(或几个)机器指令.虽然这些指令可能相对昂贵,但它们仍应比执行查找操作更便宜 - 并且查找操作可能非常需要乘法.
例如"找到数组的第4个元素"将是
<array base address> + (3 * <array element size>)
Run Code Online (Sandbox Code Playgroud)
鉴于您的伪代码,我建议的唯一优化是执行"常量"操作(例如SizeX*SizeZ)一次,并存储这些结果.
| 归档时间: |
|
| 查看次数: |
554 次 |
| 最近记录: |