2016-10-19 176 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