Ответ 1
Из понимания сборки мусора в .NET
Поколения
Сборщик мусора поколений собирает недолговечные объекты чаще, чем долгоживущие. Короткоживущие объекты хранятся в первом поколении, поколение 0. Долгоживущие объекты вытесняются в старшие поколения, 1 или 2. Сборщик мусора работает чаще в более низких поколениях, чем в более высоких.
Когда объект создается впервые, он помещается в поколение 0. Когда поколение 0 заполняется, вызывается сборщик мусора. Объекты, которые выживают при сборке мусора в первом поколении, переносятся в следующее поколение более высокого поколения, поколение 1. Объекты, которые выживают при сборке мусора в поколении 1, переводятся в следующее поколение и поколение 2. Это алгоритм эффективно работает для мусора. Коллекция объектов, как это быстро. Обратите внимание, что поколение 2 - это самое высокое поколение, которое поддерживается сборщиком мусора.
Поколения
Хотя выделение памяти в управляемой куче происходит быстро, сам GC может занять некоторое время. С учетом этого было сделано несколько оптимизаций для улучшения производительности. GC поддерживает концепцию поколений, основанную на предположении, что чем дольше объект находится в куче, тем дольше он, вероятно, будет оставаться там. Когда объект размещается в куче, он принадлежит поколению 0. Каждая сборка мусора, которую этот объект сохранил, увеличивает его генерацию на 1 (в настоящее время наибольшее поддерживаемое поколение - 2). Очевидно, что быстрее искать и собирать мусор подмножество всех объектов в куче, поэтому GC имеет возможность собирать только объекты поколения 0, 1 или 2 (или любую комбинацию, которую выберет, пока не будет достаточно памяти). Даже собирая только более молодые объекты, GC также может определить, есть ли у старых объектов ссылки на новые объекты, чтобы гарантировать, что он случайно не проигнорирует используемые объекты.