考虑这个简单的代码:
class Program
{
static List<Data> listData = new List<Data>();
static void Main(string[] args)
{
for (int i = 0; i < 5; i++)
{
Data newData = new Data();
newData.num1 = i;
newData.num2 = i * 5;
listData.Add(newData);
}
Console.ReadLine();
}
}
class Data
{
public int num1 { get; set; }
public int num2 { get; set; }
}
出于某种原因,在为此代码分析内存时,它显示内存中有 2 Data []对象(我假设是listData对象): 任何人都可以解释原因吗?
答案 0 :(得分:3)
不,你内存中没有额外的List<Data>
,你有两个Data[]
阵列。哪个是List&lt;&gt;的基础存储?你创建的对象。
列表与LT;&GT;从一个空数组开始,第一个Add()调用创建一个可以容纳4个元素的Data []数组。在第五次Add()调用中用完了,它现在创建一个Data []数组,它的大小加倍,它可以存储8个元素。你的内存分析器仍然看到数据[]数组是垃圾,GC还没有运行。
您可以使用Capacity属性对其进行优化。在this post中有更多详细信息。
答案 1 :(得分:2)
我认为你可以依靠垃圾收集器来完成它的工作......不要担心它 (我没有足够的声誉将其作为评论发布)