2D阵列与1D阵列

cMi*_*nor 4 c# arrays

我已经阅读了二维数组与一维数组的性能问题

但最后说它可能是相同的(取决于地图自己的地图功能,C会自动执行此操作)?...

我有一个矩阵至极有1000列和行440,000,000,其中每个元素是一个双重C#...

如果我在内存中进行一些计算,哪一个可以更好地用于性能方面?(请注意,我有需要存储这样一个monstruos数量的信息)...

MGZ*_*ero 6

如果你问的是哪个更好,一个大小为1000x44000的2D数组或一个大小为44000000的一维数组,那么就内存而言,差异是什么?你仍然拥有相同数量的元素!在性能和可理解性的情况下,2D可能更好.想象一下,当您确切地知道它们在2D阵列中的位置时,必须手动查找一维阵列中的每个列或行.


小智 6

这取决于您执行的操作数量。在下面的示例中,我将数组的值设置了 2500 次。数组的大小为 (1000 * 1000 * 3)。1D 阵列耗时 40 秒,3D 阵列耗时 1 分 39 分钟。

var startTime = DateTime.Now;
Test1D(new byte[1000 * 1000 * 3]);
Console.WriteLine("Total Time taken 1d = " + (DateTime.Now - startTime));

startTime = DateTime.Now;
Test3D(new byte[1000,1000,3], 1000, 1000);
Console.WriteLine("Total Time taken 3D = " + (DateTime.Now - startTime));

public static void Test1D(byte[] array)
{
    for (int c = 0; c < 2500; c++)
    {
        for (int i = 0; i < array.Length; i++)
        {
            array[i] = 10;
        }
    }
}

public static void Test3D(byte[,,] array, int w, int h)
{
    for (int c = 0; c < 2500; c++)
    {
        for (int i = 0; i < h; i++)
        {
            for (int j = 0; j < w; j++)
            {
                array[i, j, 0] = 10;
                array[i, j, 1] = 10;
                array[i, j, 2] = 10;
            }
         }
     }
}
Run Code Online (Sandbox Code Playgroud)