程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中大List的內存分配,

C#中大List的內存分配,

編輯:C#入門知識

C#中大List的內存分配,


之前在開發中只用到List的時候幾乎就是拿過來就用,從來沒有考慮過List的內存分配問題,試想一個有10萬元素的List的在構造和添加元素時內存是如何變化的呢?在MSDN上關於List的Capacity屬性是這麼解釋的class Program { static void Main(string[] args) { List<Part> parts = new List<Part>(); Console.WriteLine("\nCapacity: {0}", parts.Capacity); parts.Add(new Part() { PartName = "crank arm", PartId = 1234 }); parts.Add(new Part() { PartName = "chain ring", PartId = 1334 }); parts.Add(new Part() { PartName = "seat", PartId = 1434 }); parts.Add(new Part() { PartName = "cassette", PartId = 1534 }); parts.Add(new Part() { PartName = "shift lever", PartId = 1634 }); Console.WriteLine(); foreach (Part aPart in parts) { Console.WriteLine(aPart); } Console.WriteLine("\nCapacity: {0}", parts.Capacity); Console.WriteLine("Count: {0}", parts.Count); parts.TrimExcess(); Console.WriteLine("\nTrimExcess()"); Console.WriteLine("Capacity: {0}", parts.Capacity); Console.WriteLine("Count: {0}", parts.Count); parts.Clear(); Console.WriteLine("\nClear()"); Console.WriteLine("Capacity: {0}", parts.Capacity); Console.WriteLine("Count: {0}", parts.Count); Console.Read(); } } public class Part { public string PartName { get; set; } public int PartId { get; set; } public override string ToString() { return "ID: " + PartId + " Name: " + PartName; } }

知道了list的Capacity及TrimExcess()方法的用處,保證有限的內存空間能夠得到合理的運行,歸納起來主要有以下幾點:

1.當我們實例化一個List對象時,如果知道最大的Item元素時,應該在實例化List<T>時制定Capacity的數量,直接使用List的構造方法public List(int capacity);就可以。

2.當由於不斷的從list中remove掉大量元素時,此時list內存仍占用一部分不需要使用的空間,造成內存的浪費,此時可以調用TrimExcess方法來釋放多余的內存。

以上是我對list的內存分配一點淺顯的理解,還請大家多多指教,歡迎拍磚。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved