2012-06-08 22 views
0

我宣佈一個像下面這樣的列表,然後我將12個項目添加到它:應該包含12個元素的列表突然包含16個元素,爲什麼?

List lstPolygonWkt = new List();

foreach(var i in items) lstPolygonWkt.Add(i.PolygonWkt);

人們應該認爲列表現在包含12個元素,對吧? 但令我驚訝的是,事實證明,列表突然包含16個項目,然後最後4個項目爲空。 我不明白爲什麼我的清單應該是12個項目突然是16個項目。任何想法爲什麼?以及如何使列表只有12個項目,因爲它應該是?

我會貼一對夫婦的屏幕截圖:

enter image description here

enter image description here

+0

呃,容量與計數。計數=集合中的項目數量,容量=添加更多項目的可用插槽數量。集合只是一個包含它的包裝類的數組。您將項目放入數組中,直到達到容量,然後包裝類必須調整數組的大小。除非你關心記憶或性能,否則不要關注容量。不,從頭開始,只是不重視它。我建議你通過C#獲取CLR的副本。它是一個很好的閱讀,並將幫助您轉換到WP7更順暢。 – Will

+0

可能的重複[是否值得初始化列表的集合大小,如果它的大小合理已知?](http://stackoverflow.com/questions/2247773/is-it-worthwhile-to-initialize-the-collection -size-of-a-listt-if-its-size-rea) –

回答

8

中塊列表儲量內存每次需要的容量增長。因此,能力報告16,但只計算報告12.空項目有助於計數。

列表類提供TrimExcess方法來刪除未使用的空間。另外,在構造函數中預先指定容量只會導致一次內存抓取(假設您不超過該容量)。

您的屏幕截圖顯示了容量爲16的12的計數。如果內存服務,該列表會嘗試將其大小加倍(或者至少明確默認爲4,然後爲8,然後爲16)。由於您有12個物品,因此您可以從8個容量跳至16個容量。

+0

另外,我可能會推薦使用這個數組。 –

+0

感謝Adam Houldsworth,我現在對此更加清楚,對於列表的大小我感到非常驚訝,並且無法理解爲什麼。 – rune007

相關問題