Библиотека книг по компьютерным технологиям
⇒ ⇒ Разработка Windows-приложений на Microsoft Visual Basic .NET и Microsoft Visual C# .NET. Учебный курс MCAD/MCSD
⇒ ⇒ ⇒ Глава 1. Введение в .NET Framework
⇒ ⇒ ⇒ ⇒ Практикум 1. Применение классов и демонстрация сбора мусора

Читать далее: Закрепление материала

Упражнение 2. Демонстрация сбора мусора

Интерфейс, взятый из проекта DemoTest, состоит из формы с двумя видимыми элементами управления — кнопкой (button) и надписью (label) и одним невидимым — таймером, обновляющим надпись каждый 10 секунд. Запустите созданное вами приложение и пронаблюдайте за созданием экземпляров класса Demo и уничтожением при сборе мусора.

Демонстрация работы сборщика мусора

  1. Откройте форму Form1 и убедитесь, что на ней есть элементы управления Button и Label, а в области компонентов присутствует компонент Timer.
  2. Примечание. Подробнее об элементах управления — в главе 2.

  3. Щелкните правой кнопкой Button1 — откроется окно кода с обработчиком события Click для кнопки.
  4. Найдите строку Private Sub Button1_Click (Visual Basic .NET) или private void button1_Click (Visual C#). Изучите следующий код:
  5. Visual Basic .NET

    Dim Counter As Integer
    Dim aDemo
    
    For Counter = 1 To 1000
      aDemo = New Demo
    Next
    

    Visual C#

    int Counter;
    Demo aDemo;
    
    for(Counter = 0; Counter < 1000; Counter++)
    {
      aDemo = new Demo();
    }
    

    Здесь объявляются две переменные типа DemoCounter и aDemo, за которыми следует цикл, тысячу раз присваивающий переменной aDemo ссылку на новый экземпляр класса Demo. При создании каждого экземпляра класса Demo выполняется его конструктор, который увеличивает значение переменной Instances. Запись ссылки на новый экземпляр Demo в переменную aDemo, выполняемая в цикле, уничтожает ссылку на предыдущий экземпляр. С каждым оборотом цикл создает все больше объектов Demo, на которые никто не ссылается, увеличивая работу для сборщика мусора. Каждый щелчок кнопки создает тысячу новых объектов.

  6. Нажмите F5, чтобы скомпилировать и запустить приложение. Появится кнопка и надпись, отображающая число экземпляров класса Demo, существующих в памяти. Щелкните кнопку один раз.
  7. На форме появится следующая надпись: «There are 1000 instances of Demo in memory». Подождите немного, через некоторое время (примерно через пару минут) вы увидите, что в памяти не осталось ни одного экземпляра Demo. Это означает, что все 1000 экземпляров класса Demo были удалены при сборе мусора. При удалении каждого объекта был исполнен деструктор, при этом значение переменной Instances уменьшалось.

    Поскольку приоритет потока сборщика мусора относительно невысок, надпись изменяется не мгновенно. Однако при нехватке памяти приоритет этого потока возрастает.

  8. Щелкните кнопку несколько раз подряд. Посмотрите, сколько экземпляров вашего объекта уместится в памяти. Если на компьютере установлено много памяти, число объектов может достигать десятков тысяч, прежде чем начнется сбор мусора. Как только возникнет дефицит памяти, сборщик мусора быстро и эффективно освободит память, занятую объектами, на которые нет ссылок.
Google
 
Рейтинг@Mail.ru
Сайт управляется системой uCoz