我已经阅读了二维数组与一维数组的性能问题
但最后说它可能是相同的(取决于地图自己的地图功能,C会自动执行此操作)?...
我有一个矩阵至极有1000列和行440,000,000,其中每个元素是一个双重的C#...
如果我在内存中进行一些计算,哪一个可以更好地用于性能方面?(请注意,我有需要存储这样一个monstruos数量的信息)...
如果你问的是哪个更好,一个大小为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)