.NET 4.x Почему не очищается память после очистки List а? - C#

Узнай цену своей работы

Формулировка задачи:

Привет. Есть такой код:
        static void Main(string[] args)
        {
            Console.ReadKey();
            Test();
            Console.ReadKey();
        }
 
        static void Test()
        {
            var list = new List<string>();
            for(int i=0; i< 10000000;i++)
            {
                list.Add(i.ToString());
            }
            list.Clear();
        }
    }
Что происходит: запускаю программу, она ждет ввод символа. В данный момент программа занимает около 4 МВ памяти. Нажимаю энтер, запускается метод Test. Как видно, этот метод заполняет большой лист строк, затем его очищает. В ходе работы этого метода потребление памяти растет, и рост заканчивается около 350 МВ. Далее, программа снова ждет ввод символа...и, как я ожидал, объем занятой памяти должен был заметно снизиться, ведь метод Test завершил работу, и я очистил лист перед выходом из метода. Кроме того, я не вижу больше никаких ссылок на лист, и он должен был попасть в сборку мусора. Однако, по-прежнему занято 350 МВ. памяти. Почему так?

Решение задачи: «.NET 4.x Почему не очищается память после очистки List а?»

textual
Листинг программы
        static void Main(string[] args)
        {
            Console.ReadKey();
            Test();
            Console.ReadKey();
        }
 
        static void Test()
        {
            var list = new List<string>();
            for (int i = 0; i < 10000000; i++)
            {
                list.Add(i.ToString());
            }
            list.Clear();
            list = new List<string>();
            GC.Collect();
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4 из 5
Похожие ответы