我在我的程序中遇到性能瓶颈,我需要在紧密的循环中数百万次访问数组中的元素.
我环顾四周,普遍的共识似乎是即使多维数组应该更快,它们的底层实现也是低效的,所以只需使用锯齿状数组.我对它进行了分析,肯定的是,锯齿状阵列的速度提高了50%.精细.
但是,我也尝试过手动索引(例如,通过执行类似这样的操作object value = array[i * 24 + j]; (where 24 is an array size)来模拟多维数组的行为:并通过乘法来访问它,并使用乘法来模拟多维数组.
令人惊讶的是,对于访问而言,这也比锯齿状阵列快15%(我只关心).这让我感到很难过,因为一方面,手动重新创建多维数组比C#的内置实现要快得多,而且两个,与仅使用锯齿状/多维数组进行索引相比,获取指标所涉及的数学更为丑陋.
有什么办法可以在不使用我自己的手动索引的情况下收回速度优势吗?当然可以设置或检查某种优化来模拟这种行为?为什么数组的C#实现效率低下?