GC.GetGeneration Метод

Определение

Возвращает текущий номер поколения объекта.

Перегрузки

GetGeneration(Object)

Возвращает номер текущего поколения указанного объекта.

GetGeneration(WeakReference)

Возвращает текущий номер поколения для целевого объекта указанной слабой ссылки.

GetGeneration(Object)

Исходный код:
GC.cs
Исходный код:
GC.cs
Исходный код:
GC.cs

Возвращает номер текущего поколения указанного объекта.

public static int GetGeneration(object obj);

Параметры

obj
Object

Объект, информация о поколении которого извлекается.

Возвращаемое значение

Текущий objномер поколения , или Int32.MaxValue.

Примеры

В следующем примере показано, как использовать GetGeneration метод для определения возраста объекта . Затем в примере выполняется сборка мусора для очистки памяти и сравнения общих объемов памяти до и после сбора данных в консоли.

using System;

namespace GCCollectIntExample
{
    class MyGCCollectClass
    {
        private const long maxGarbage = 1000;

        static void Main()
        {
            MyGCCollectClass myGCCol = new MyGCCollectClass();

            // Determine the maximum number of generations the system
        // garbage collector currently supports.
            Console.WriteLine("The highest generation is {0}", GC.MaxGeneration);

            myGCCol.MakeSomeGarbage();

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            // Determine the best available approximation of the number
        // of bytes currently allocated in managed memory.
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            // Perform a collection of generation 0 only.
            GC.Collect(0);

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            // Perform a collection of all generations up to and including 2.
            GC.Collect(2);

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
            Console.Read();
        }

        void MakeSomeGarbage()
        {
            Version vt;

            for(int i = 0; i < maxGarbage; i++)
            {
                // Create objects and release them to fill up memory
        // with unused objects.
                vt = new Version();
            }
        }
    }
}

Комментарии

Используйте этот метод, чтобы определить возраст объекта, а затем используйте эти сведения с методом Collect , чтобы заставить сборщик мусора собирать объекты в том же поколении. Например, используйте этот метод, если у вас есть набор объектов, которые создаются как группа и одновременно становятся недоступными.

Начиная с .NET 8 этот метод может возвращать MaxValue объекты, выделенные в кучах, не относящихся к сборке мусора. Дополнительные сведения см. в разделе Сборка мусора. GetGeneration может возвращать Int32.MaxValue.

См. также раздел

Применяется к

.NET 10 және басқа нұсқалар
Өнім Нұсқалар
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

GetGeneration(WeakReference)

Исходный код:
GC.CoreCLR.cs
Исходный код:
GC.CoreCLR.cs
Исходный код:
GC.CoreCLR.cs

Возвращает текущий номер поколения для целевого объекта указанной слабой ссылки.

public static int GetGeneration(WeakReference wo);

Параметры

wo
WeakReference

Объект WeakReference, указывающий на целевой объект, номер поколения которого требуется определить.

Возвращаемое значение

Номер текущего поколения целевого объекта wo, или MaxValue.

Исключения

Сборка мусора уже выполнена для wo.

Целевой объект слабой ссылки уже был собран мусором.

Примеры

В следующем примере показано использование метода для GetGeneration определения возраста слабого ссылочного объекта.

using System;

namespace GCGetGenerationWeakExample
{
    public class MyGCCollectClass
    {
        private const long maxGarbage = 1000;

        static void Main()
        {
            // Create a strong reference to an object.
            MyGCCollectClass myGCCol = new MyGCCollectClass();

            // Put some objects in memory.
            myGCCol.MakeSomeGarbage();

            // Get the generation of managed memory where myGCCol is stored.
            Console.WriteLine("The object is in generation: {0}", GC.GetGeneration(myGCCol));
                        
            // Perform a full garbage collection.
            // Because there is a strong reference to myGCCol, it will
            // not be garbage collected.
            GC.Collect();
            
            // Get the generation of managed memory where myGCCol is stored.
            Console.WriteLine("The object is in generation: {0}", GC.GetGeneration(myGCCol));
            
            // Create a WeakReference to myGCCol.
            WeakReference wkref = new WeakReference(myGCCol);
            // Remove the strong reference to myGCCol.
            myGCCol = null;

            // Get the generation of managed memory where wkref is stored.
            Console.WriteLine("The WeakReference to the object is in generation: {0}", GC.GetGeneration(wkref));
            
            // Perform another full garbage collection.
            // A WeakReference will not survive a garbage collection.
            GC.Collect();
        
            // Try to get the generation of managed memory where wkref is stored.
            // Because it has been collected, an exception will be thrown.
            try
            {
                Console.WriteLine("The WeakReference to the object is in generation: {0}", GC.GetGeneration(wkref));
                Console.Read();
            }
            catch(Exception e)
            {
                Console.WriteLine("The WeakReference to the object has been garbage collected: '{0}'", e);
                Console.Read();
            }
        }

        void MakeSomeGarbage()
        {
            Version vt;

            for(int i = 0; i < maxGarbage; i++)
            {
                // Create objects and release them to fill up memory
                // with unused objects.
                vt = new Version();
            }
        }
    }
}

Комментарии

Начиная с .NET 8 этот метод может возвращать MaxValue объекты, выделенные в кучах, не относящихся к сборке мусора. Дополнительные сведения см. в разделе Сборка мусора. GetGeneration может возвращать Int32.MaxValue.

См. также раздел

Применяется к

.NET 10 және басқа нұсқалар
Өнім Нұсқалар
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1