Я пытаюсь понять процесс сбора мусора, и я думаю, что у меня есть идея. Но когда я работаю над некоторыми кодами, он не работает, как я ожидал. В приведенном ниже коде я только что создал объект 1.000.000 и добавил их в список. Через некоторое время нет объекта, но память стирается и не уменьшается. Как я могу добиться освобождения памяти после удаления всех объектов?Освобождение памяти, используемой объектами и списками
Благодаря
private void button1_Click(object sender, EventArgs e)
{
List<Test> tesst = new List<Test>();
for (long i = 0; i < 1000000; i++)
{
using (Test test = new Test())
{
test.LongObj = i;
test.StrObj = i.ToString();
test.DecObj = Convert.ToDecimal(i);
tesst.Add(test);
}
}
Process proc = Process.GetCurrentProcess();
proc.Refresh();
label1.Text = Test.counter.ToString();
label2.Text = (proc.PrivateMemorySize64/1048576).ToString();
for (int i = 0; i < tesst.Count; i++)
{
tesst[i] = null;
}
tesst.Clear();
tesst = null;
}
private void button2_Click(object sender, EventArgs e)
{
Process proc = Process.GetCurrentProcess();
proc.Refresh();
label1.Text = Test.counter.ToString();
label2.Text = (proc.PrivateMemorySize64/1048576).ToString();
}
А класс образец
public class Test : IDisposable
{
public static long counter = 0;
public long LongObj { get; set; }
public string StrObj { get; set; }
public decimal DecObj { get; set; }
public Test()
{
Interlocked.Increment(ref counter);
}
~Test()
{
Interlocked.Decrement(ref counter);
}
public void Dispose()
{
}
}
Я выполняю некоторые операции в пакетном коде, и у меня проблемы с памятью. Вот почему я пытаюсь освободить память вручную. – PepeDeLew
Это не будет веской причиной. Когда вы пытаетесь выделить память, и слишком много «давления в памяти» (т. Е. Память должна быть освобождена до выделения большего количества), GC позаботится об этом для вас. Это целая работа, чтобы справиться с этим для вас. Он очистит его прямо перед тем, как выделить вам больше памяти. Если вы получаете исключение, связанное с памятью, это гораздо лучший вопрос. В этом случае вы должны просто позволить этому сделать это. –