我编写了一个简单的 .net 表单应用程序来测试 .NET 的一些行为,了解它如何与垃圾收集器一起处理内存以进行清理。
表单应用程序 GUI 如下所示:
后面的代码是这样的:
public partial class Form1 : Form
{
private readonly IList<byte[]> _btyList = new List<byte[]>();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int i = 0;
while (i < 3)
{
byte[] buffer = File.ReadAllBytes(@"C:\PFiles\20131018_nl_metro holland.pdf");
_btyList.Add(buffer);
i++;
}
}
private void button2_Click(object sender, EventArgs e)
{
int i = 0;
while (i < _btyList.Count)
{
_btyList[i] = null;
i++;
}
}
private void button3_Click(object sender, EventArgs e)
{
GC.Collect();
}
}
当我将几个字节数组添加到字节数组的私有列表时,它(当然)会影响应用程序的内存使用:
现在,当我按下清除内存按钮时,内存使用量将保持不变。我可以等待几个小时,但它不会改变。如果我按下垃圾收集按钮(在清除内存之后),它将立即释放内存:
问题是:为什么垃圾收集器在这种情况下不起作用?