【发布时间】:2012-01-19 05:35:00
【问题描述】:
我正在对存储图像信息的数组运行图像分析代码。不幸的是,代码非常繁重,运行一帧平均需要 25 秒。我看到的主要问题是数组寻址。哪个是通过 2d 数组最快的,并且有任何差异
先水平后垂直
for (int y = 0; y < array.Length; ++y)
for (int x = 0; x < array[].Length; ++x)
//Code using array[y][x]
垂直然后水平?
for (int x = 0; x < array[].Length; ++x)
for (int y = 0; y < array.Length; ++y)
//Code using array[y][x]
此外,我尽量避免直接寻址,而是使用指针。
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]
或
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]
非常感谢任何帮助。 最大
【问题讨论】:
-
我应该提到该数组实际上是用于位图颜色分配的 BitmapData:/ sry...
-
那么,你已经在固定内存了吗?
-
您是否尝试过编写每个解决方案并测量需要多长时间?那会给你最准确的答案。但如果我不得不猜测,我会说选项 3 和 4 可能比选项 1 和 2 稍快。
-
如果单张图片需要 25 秒,那么您发布的代码片段显然不是限制部分。
-
您最大的问题是使用多维锯齿状数组。你能把它变成一个基于零的单维数组吗?
标签: c# arrays performance pointers multidimensional-array