2012-01-09 31 views
3

可能重複:
Performance of Arrays vs. Lists陣列vs.list性能問題

我想知道哪一個是更好的方式做這個任務。

string[] week = new string[7] 
    week[0] = "Sunday"; 
    week[1] = "Monday"; 
    week[2] = "Tuesday"; 

    foreach (string day in week) 
    { 
    //Some task 
    } 


List<string> week = new List<string>(); 
list.Add("Sunday"); 
list.Add("Monday"); 
list.Add("Tuesday"); 

foreach (string day in list) 
{ 
    //Some Task 
} 

是否有任何性能問題?或任何其他更好的way.Thanks。

+3

http://stackoverflow.com/questions/454916/performance-of-arrays-vs-lists – keyboardP 2012-01-09 05:13:12

+0

我認爲這取決於你想要做什麼。無論如何,Array都會更快,但列表對於某些任務可能非常方便。我還建議你的'List'使用'新的List(){「星期天」,「星期一」,「星期二」}'初始值,但這只是個人偏好。也可以使用數組,'new [] {「Sunday」,「Monday」,「Tuesday」}'。 – kamranicus 2012-01-09 05:16:38

回答

7

第一個可能會表現更好,但只有這麼輕微。原因在於,即使列表後面有一個數組,迭代必須經過幾層方法調用才能獲取值,而數組是,幾乎可以使用直接內存尋址。差異將會很小,以至於你不得不迭代數千次來測量它。這就是所謂的micro-optimization,它通常被認爲是一種浪費。

+0

感謝您提供有關微優化的信息。 – 2012-01-09 05:35:16

0

如果你總是把同樣的東西在陣列中,使用此語法:

String [] week = new String [] { 
    "Sunday", 
    "Monday", 
    ... 
}; 

數組效率更高,名單可能會拉閘調整本身。

0

我想知道哪一個是更好的方式編程做這個任務

與往常一樣,人沒有頗有基礎尋找一個簡單的解決方案。空無一人。看,有一個性能差異,它是完全不相關的任務(數據太少)。

通常情況下,數組速度更快,但其他元素存在嚴重問題 - 插入/刪除速度慢,因爲所有元素都必須複製到新數組中。

列表沒有拷貝問題,但每個條目都是一個節點,意味着更多的內存使用和更多的內存訪問 - 每個條目都是您的對象+節點對象來回指向下一個/最後一個元素。這使得隨機訪問速度變慢,有時顯着。不是一個問題,如果你只做foreach,尤其是隻有7個元素。如果您有數以千計的250.000個項目列表訪問,那麼更多。

你學習編程的一部分是理解列表中每一項的標準特性。上面的問題是一個實習生級別的初學者問題 - 我喜歡在程序員訪談中使用這個問題來清除崇拜者。