Я пытаюсь создать метод расширения, который позволит мне разделить огромный массив на гораздо меньшие. Мой текущий код выглядит следующим образом, но для генерации по-прежнему требуется около 2 секунд с массивом размером 512x512x512 и размером вспомогательных кубов, установленным на 32x32x32.
public static T[][][][] Divide<T>(this T[][][] array, int xSize, int ySize, int zSize)
{
int numberOfCubesInAxisX = array.Length / xSize;
int numberOfCubesInAxisY = array[0].Length / ySize;
int numberOfCubesInAxisZ = array[0][0].Length / zSize;
T[][][][] arrayDivided = new T[numberOfCubesInAxisX * numberOfCubesInAxisY * numberOfCubesInAxisZ][][][];
int index = 0;
while (index < arrayDivided.Length)
{
int xIndex = index / numberOfCubesInAxisZ / numberOfCubesInAxisX;
int yIndex = index / numberOfCubesInAxisZ % numberOfCubesInAxisY;
int zIndex = index % numberOfCubesInAxisZ;
arrayDivided[index] = new T[xSize][][];
for (int x = 0; x < xSize; x++)
{
arrayDivided[index][x] = new T[ySize][];
for (int y = 0; y < ySize; y++)
{
arrayDivided[index][x][y] = new T[zSize];
for (int z = 0; z < zSize; z++)
{
arrayDivided[index][x][y][z] = array[x + (xIndex * xSize)][y + (yIndex * ySize)][z + (zIndex * zSize)];
}
}
}
index++;
}
return arrayDivided;
}
Если кто-нибудь знает, как его оптимизировать, я буду рад это услышать! Спасибо!
1 ответ
Просто быстрый снимок производительности …..
Код рассчитывает
xIndex * xSize
xSize*ySize*zSize
разyIndex * ySize
xSize*ySize*zSize
разzIndex * zSize
xSize*ySize*zSize
раз
в то время как его следует рассчитывать только один раз для каждой итерации while
петля.
Кроме того, x
только изменения в первом for
петля и y
только изменения во втором for
петля.
Привет, спасибо за подсказку, я действительно немного изменил код. В результате получился не астрономический выигрыш во времени, а небольшой хороший апгрейд. Спасибо за чаевые.
— Камигаку