Max*_* Z. 11 c# arrays performance pointers multidimensional-array
我在存储有关图像信息的数组上运行图像分析代码.不幸的是,代码非常繁重,平均需要25秒来运行单帧.我看到的主要问题是数组寻址.哪个是运行2d阵列最快的,并且完全没有任何差异
水平然后垂直
for (int y = 0; y < array.Length; ++y)
for (int x = 0; x < array[].Length; ++x)
//Code using array[y][x]
Run Code Online (Sandbox Code Playgroud)
和垂直然后horrizontal?
for (int x = 0; x < array[].Length; ++x)
for (int y = 0; y < array.Length; ++y)
//Code using array[y][x]
Run Code Online (Sandbox Code Playgroud)
此外,我试图避免直接寻址和使用指针.
for (int y = 0; y < array.Length; ++y)
int* ptrArray = (int*)array[0];
for (int x = 0; x < array[].Length; ++x, ++ptrArray)
//Code using ptrArray for array[y][x]
Run Code Online (Sandbox Code Playgroud)
要么
for (int x = 0; x < array[].Length; ++x)
int* ptrArray = (int*)array[0];
for (int y = 0; y < array.Length; ++y, ptrArray += array[].Length)
//Code using ptrArray for array[y][x]
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏.马克斯
一种选择是使用反向循环(for() loop从array.Length下到 0 开始)
这会加快速度。
例如,
for (int x = array[].Length-1; x >= 0; --x)
int* ptrArray = (int*)array[0];
for (int y = array.Length-1; y >= 0 ; --y, ptrArray += array[].Length)
//Code using ptrArray for array[y][x]
Run Code Online (Sandbox Code Playgroud)