2016-10-19 138 views
0

我正在寻找降低成本的方法。将新项目添加到阵列时发生瓶颈。我正在运行约。一千万次迭代,所以任何性能的提高,不管多小,都会有很长的路要走。需要帮助改善循环性能

int[][] coordinates; 

public void RefactorCoordinates() 
{ 
    try 
    { 
     coordinates = new int[10000000][]; 
     int nextIndex = 0; 
     double width = OffsetWidth; 
     double height = OffsetHeight; 
     double depth = OffsetDepth; 
     for (int z = 0; z < width; ++z) 
     { 
      for (int y = 0; y < height; ++y) 
      { 
       for (int x = 0; x < depth; ++x) 
       { 
        coordinates[nextIndex] = new int[] { z, y, x }; 
        nextIndex++; 
       } 
      } 
     } 
     Array.Resize(ref coordinates, nextIndex); 
    } 
    catch(Exception ex) 
    { 
     ex.ToString(); 
    } 
} 
+0

大部分时间花费什么,后来调整数组的大小,还是循环?预先计算总大小不是更简单吗(因为你无论怎样声明坐标都是新的?)另外,你能否根据索引计算z,y,x?只是抛出一些想法,并不真正知道意图是什么 – Icepickle

+0

阵列的大小几乎是免费的。如果我将注释添加到数组中的新行注释掉,执行是即时的。我收到3个整数值并创建一个新对象来表示这些值的每个增量。这是循环的唯一功能 – Jace

+0

如何将2d数组替换为字典?但它取决于其他编程逻辑。 – Prisoner

回答

0

原来,大部分性能问题通过结构而不是数组表示数据来缓解。我不知道为什么这是更快,但无论什么作品。

+0

我要建议使用多维数组:int [,] coordiantes = new int [10000 ,3];你看到的速度是由于内存分配。由于结构具有固定的大小,因此数组的初始化现在可以分配一块内存。 – ReneA

+0

感谢您的信息 – Jace