Разработка компиляторов

       

Пример на сборку мусора


Пример на сборку мусора

using System; using System.Collections; class GarbageClass { public static int Main(String[] args) { // ArrayList object created in heap, myArray is now a root ArrayList myArray = new ArrayList(); // Create 10000 objects in the heap for (int x = 0; x < 10000; x++) { myArray.Add(x.ToString()); //Object created in heap }

foreach (object currValue in myArray) { string s = (string)currValue; Console.WriteLine (s); }

System.GC.Collect (GC.GetGeneration(myArray[0])); return 0; } }

Проиллюстрируем основные концепции сборки мусора на простом примере. На слайде приведен класс GarbageClass, главный метод которого создает список myArray, а затем в цикле добавляет в этот список 10 000 строковых объектов. Все эти объекты создаются в куче; время их жизни распространяется до конца метода Main.

Затем все элементы myArray перебираются в цикле foreach, и значение каждого элемента печатается на экран. При этом на каждой итерации цикла происходит создание объекта в куче (это, конечно же, жутко неэффективно - по-хорошему надо было бы передавать currValue непосредственно в метод WriteLine, но мы как раз хотим продемонстрировать пример, в котором много мусора).

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



Содержание раздела