Я добавляю 20 Мб в список несколько раз, чтобы приложение потребляло 600 МБ. Однако почему я очищаю список, память не освобождается..Net. Почему сборщик мусора не запускается, когда я очищаю список?
Вот мой код
List<int> data = new List<int>();
const int TwentyMB = 20 * 1024 * 1024;
public MainForm()
{
InitializeComponent();
}
private void AddDataButton_Click(object sender, EventArgs e)
{
for (var i = 0; i < TwentyMB; i++)
{
data.Add(i);
}
}
private void DestroyButton_Click(object sender, EventArgs e)
{
data.Clear();
data.Capacity = 0;
}
Пока я не называю GC.Collect, память освобождается
private void CollectButton_Click(object sender, EventArgs e)
{
GC.Collect();
}
Может кто-нибудь сказать мне, почему память не отпускают? Когда GC будет работать автоматически?
Думаю, вы должны прочитать [Основы сбора мусора] (https: // msdn. microsoft.com/en-us/library/ee787088(v=vs.110).aspx) – sloth
Конечно. Я прочитал эту статью, я создаю этот образец, чтобы проверить, что они сказали. Я думаю, что глупо тратить 600 МБ памяти. В приложении формы выигрыша он может не вызвать проблем с вызовом GC.Collect вручную, но на сайте asp.net это может повлиять на производительность другого запроса. – user929794
Почему память должна быть потрачена впустую? Если бы память была бесплатной, это было бы бесполезно. – sloth