Сбор мусора в C#

В этом примере показано, как вы можете принудительно собрать сборку мусора на C#. Языки .NET используют схему сбора мусора управления памятью.

Есть несколько странных деталей, но основной процесс - это. Когда приложение работает с низким объемом памяти, сборщик мусора может решить запустить. Когда он это делает, он отмечает всю память, которую программа использовала как не используемую. Затем он сканирует все объекты, которые доступны программе, и отмечает их как используемые. Наконец, он перемещает объекты, которые по-прежнему не используются в пуле свободной памяти.

Есть несколько странных деталей, но основной процесс - это. Когда приложение работает с низким объемом памяти, сборщик мусора может решить запустить. Когда он это делает, он отмечает всю память, которую программа использовала как не используемую. Затем он сканирует все объекты, которые доступны программе, и отмечает их как используемые. Наконец, он перемещает объекты, которые по-прежнему не используются в пуле свободной памяти.

...

Обычно вам не следует возиться с сборщиком мусора, потому что он делает очень хорошую работу самостоятельно. Если вы заставите сборку мусора произойти, вы, вероятно, сделаете программу менее эффективной. Однако, если вы пишете деструкторы для объектов, вам может потребоваться принудительная сборка мусора для их проверки.

Следующий код показывает, как этот пример заставляет сборку мусора, когда вы нажимаете кнопку «Собрать».

// Устанавливаем сборку мусора.
private void btnCollect_Click(object sender, EventArgs e)
{
    GC.Collect();
}

Вот и все. (Вы также можете передать методу Collect параметр, чтобы сообщить ему, какое поколение собирается, но это требует, чтобы вы поняли совершенно новый уровень детализации коллекции мусора, о котором вам действительно не нужно знать больше всего времени.)

В следующем коде показан класс Person.

class Person
{
    public Person()
    {
        Console.WriteLine("Person:Create");
    }

    ~Person()
    {
        Console.WriteLine("Person:Finalize");
    }
}

Этот класс отображает сообщения в окне вывода, показывающие, когда его объекты создаются и завершаются.

Запустите программу и несколько раз нажмите кнопку «Создать человека», чтобы создать объекты Person. В окне вывода будет показано создание объекта. Следующий код показывает, как программа создает объекты Person.

// Создаем человека.
private void btnCreatePerson_Click(object sender, EventArgs e)
{
    Person person = new Person();
}

Этот код просто создает объект Person, а затем завершает работу. По завершении метода программа не имеет ссылки на новый объект, поэтому его память фактически теряется для программы. В следующий раз, когда сборщик мусора запустится, он вернет объект.

Если вы не нажмете кнопку «Создать человека» на целую кучу времени (в тысячах), программа, вероятно, не будет работать с низким объемом памяти, поэтому сборщик мусора не будет работать.

Если вы нажмете кнопку «Собрать», появится сборщик мусора, и вы увидите сообщение «Финализировать сообщения» в окне «Вывод» для каждого из созданных вами объектов Person.

Источник: http://csharphelper.com/blog/2014/11/force-garbage-collection-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Adblock
detector