2014-07-17 58 views
0

我正在優化我的代碼,發現問題是我的變量。由於我喜歡有一個有組織和可讀的代碼,不同的變量有不同的類,我只是將它們稱爲Main方法,並在那裏進行計算。優化我的代碼和由此造成的問題(C#)

這樣我的每個輸出都花了12分鐘。局部變量被定義並且輸出所需的時間達到6分鐘,這是非常成功的。 我的問題是什麼:

我不想改變我所有的代碼,所以經過計算,存儲在局部變量中的結果被複制到原始變量中。這個過程(複製結果)需要20%的時間,我該如何改進?

Static void Main(String[] args) 
{ 
    Vector3D temp=new Vector3D(); 
    double[,] Xvelocity= new double[nx,ny]; 
    double[,] Yvelocity= new double[nx,ny]; 
    // 
    // some calculations on local variables 
    // 
    // saving results back in the original variables 
    for (int i = 1; i <nx; i++) 
    { 
     for (int j = 1; j <ny; j++) 
     { 
      // Local variables: Xvelocity[i,j], Yvelocity[i,j], Temp[i,j] 
      temp.X=Xvelocity[i,j]; 
      temp.Y=Yvelocity[i,j]; 
      theSpace.TheCells[i, j, 0].Velocity=temp; 
      theSpace.TheCells[i, j, 0].Tempreture=Temp[i,j]; 
     } 
    } 
} 

如果我不想將結果複製到原始數組,我該如何訪問在Main方法中從其他類定義的局部變量?

+7

這個問題似乎是題外話,因爲它屬於在[代碼審查(http://codereview.stackexchange.com/) – DGibbs

+2

如果你不想複製,不。傳遞數組作爲參數。由於它們已經是參考文獻,因此不會進行復制。 –

+1

你不能。方法中定義的局部變量只對該方法可見。重構你的代碼是否會更好,以便計算在單獨的公共/共享方法/類中完成,並返回結果,然後可以從主方法調用它。 – HaukurHaf

回答

1

在大多數編程語言中,多維數組很少有效。嘗試使用鋸齒狀數組(數組數組)而不是多維數組。

http://msdn.microsoft.com/en-us/library/2s05feca.aspx

+0

爲什麼你認爲鋸齒陣列應該更快?它們需要2個存儲器訪問(用於2d陣列),而微米陣列 - 只有一個。 –

+1

只在每個循環中。每個元素不需要兩次內存訪問。 請參閱http://stackoverflow.com/questions/468832/why-are-multi-dimensional-arrays-in-net-slower-than-normal-arrays – Ananke

+0

矩形二維數組需要的內存少於矩形鋸齒陣列。但是一個不是真正矩形的數組,並且具有不同的子數組長度,可以將較少的內存用作鋸齒形數組。 http://www.dotnetperls.com/jagged-2d-array-memory – Mehdi