考虑一下这个简单的代码:
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对象):
有人能解释原因吗?
发布于 2014-11-09 14:59:59
不,内存中没有额外的List<Data>
,而是有两个Data[]
数组。它们是您创建的List<>对象的底层存储。
List<>从一个空数组开始,第一个Add()调用创建一个可以容纳4个元素的Data[]数组。它在第五个Add()调用中运行,它现在创建一个Data[]数组,该数组的大小是原来的两倍,它可以存储8个元素。您的内存分析器仍然可以看到垃圾的Data[]数组,GC还没有运行。
您可以使用容量属性对此进行优化。在this post中有更多的细节。
发布于 2014-11-09 14:48:35
我想你可以指望垃圾收集器来完成它的工作..。别担心(我没有足够的声誉来发表评论)
https://stackoverflow.com/questions/26829299
复制相似问题