Поделиться через


GC Класс

Определение

Управляет системным сборщиком мусора — службой, которая автоматически высвобождает неиспользуемую память.

public ref class GC abstract sealed
public ref class GC sealed
public static class GC
public sealed class GC
type GC = class
Public Class GC
Public NotInheritable Class GC
Наследование
GC

Примеры

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

using namespace System;
const long maxGarbage = 1000;
ref class MyGCCollectClass
{
public:
   void MakeSomeGarbage()
   {
      Version^ vt;
      for ( int i = 0; i < maxGarbage; i++ )
      {
         
         // Create objects and release them to fill up memory
         // with unused objects.
         vt = gcnew Version;

      }
   }

};

int main()
{
   MyGCCollectClass^ myGCCol = gcnew 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 ) );
}
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();
            }
        }
    }
}
open System

let maxGarbage = 1000

type MyGCCollectClass() =
    member _.MakeSomeGarbage() =
        for _ = 1 to maxGarbage do
            // Create objects and release them to fill up memory with unused objects.
            Version() |> ignore

[<EntryPoint>]
let main _ =
    let myGCCol = MyGCCollectClass()

    // Determine the maximum number of generations the system
    // garbage collector currently supports.
    printfn $"The highest generation is {GC.MaxGeneration}"

    myGCCol.MakeSomeGarbage()

    // Determine which generation myGCCol object is stored in.
    printfn $"Generation: {GC.GetGeneration myGCCol}"

    // Determine the best available approximation of the number
    // of bytes currently allocated in managed memory.
    printfn $"Total Memory: {GC.GetTotalMemory false}"

    // Perform a collection of generation 0 only.
    GC.Collect 0

    // Determine which generation myGCCol object is stored in.
    printfn $"Generation: {GC.GetGeneration myGCCol}"

    printfn $"Total Memory: {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.
    printfn $"Generation: {GC.GetGeneration myGCCol}"
    printfn $"Total Memory: {GC.GetTotalMemory false}"

    0
Namespace GCCollectInt_Example
    Class MyGCCollectClass
        Private maxGarbage As Long = 10000

        Public Shared Sub Main()
            Dim myGCCol As 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()

        End Sub


        Sub MakeSomeGarbage()
            Dim vt As Version

            Dim i As Integer
            For i = 0 To maxGarbage - 1
                'Create objects and release them to fill up memory
                'with unused objects.
                vt = New Version
            Next i
        End Sub
    End Class
End Namespace

Комментарии

Дополнительные сведения об этом API см. в разделе Дополнительные примечания API для сборки мусора.

Свойства

MaxGeneration

Возвращает наибольшее число поколений, поддерживаемое системой в настоящее время.

Методы

AddMemoryPressure(Int64)

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

AllocateArray<T>(Int32, Boolean)

Выделяет массив.

AllocateUninitializedArray<T>(Int32, Boolean)

Выделяет массив при пропуске нулевой инициализации, если это возможно.

CancelFullGCNotification()

Отменяет регистрацию уведомления о сборке мусора.

Collect()

Принудительно запускает немедленную сборку мусора для всех поколений.

Collect(Int32)

Принудительно начинает немедленную сборку мусора, начиная с нулевого поколения и вплоть до указанного поколения.

Collect(Int32, GCCollectionMode)

Принудительно запускает немедленную сборку мусора начиная с нулевого поколения и вплоть до указанного поколения в момент времени, заданный значением GCCollectionMode.

Collect(Int32, GCCollectionMode, Boolean)

Принудительная сборка мусора с поколения 0 до указанного поколения во время, указанное значением GCCollectionMode, со значением, указывающим, должна ли сборка быть блокирующей.

Collect(Int32, GCCollectionMode, Boolean, Boolean)

Принудительная сборка мусора с поколения 0 до указанного поколения во время, указанное значением GCCollectionMode, со значениями, указывающими, должна ли сборка быть блокирующей и сжимающей.

CollectionCount(Int32)

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

EndNoGCRegion()

Завершает режим задержки без области сборки мусора.

GetAllocatedBytesForCurrentThread()

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

GetConfigurationVariables()

Возвращает конфигурации, используемые сборщиком мусора.

GetGCMemoryInfo()

Возвращает сведения о памяти при сборке мусора.

GetGCMemoryInfo(GCKind)

Возвращает сведения о памяти при сборке мусора.

GetGeneration(Object)

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

GetGeneration(WeakReference)

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

GetTotalAllocatedBytes(Boolean)

Возвращает число байтов, выделенных за время существования процесса. Возвращаемое значение не содержит собственных выделений.

GetTotalMemory(Boolean)

Извлекает размер кучи, исключая фрагментацию. Например, если общий размер кучи сборки мусора составляет 100 мб, а фрагментация, т. е. пространство, занимаемое свободными объектами, занимает 40 МБ, этот API будет сообщать о 60 мб. Параметр указывает, может ли этот метод выдержать короткий интервал времени ожидания перед возвратом, пока система выполняет сборку мусора и завершает объекты.

GetTotalPauseDuration()

Возвращает общее время, приостановленное в сборке мусора с начала процесса.

KeepAlive(Object)

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

RefreshMemoryLimit()

Указывает сборщику мусора перенастроить себя путем обнаружения различных ограничений памяти в системе.

RegisterForFullGCNotification(Int32, Int32)

Указывает, что необходимо отправлять уведомления о сборке мусора, когда соблюдены условия для полной сборки мусора и когда завершена сборка.

RegisterNoGCRegionCallback(Int64, Action)

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

RemoveMemoryPressure(Int64)

Информирует среду выполнения о том, что неуправляемая память освобождена и ее более не требуется учитывать при планировании сборки мусора.

ReRegisterForFinalize(Object)

Требует, чтобы система вызвала метод завершения для указанного объекта, для которого ранее был вызван метод SuppressFinalize(Object).

SuppressFinalize(Object)

Сообщает среде CLR, что она на не должна вызывать метод завершения для указанного объекта.

TryStartNoGCRegion(Int64)

Пытается запретить сборку мусора во время выполнения критического пути, если доступен указанный достаточный объем памяти.

TryStartNoGCRegion(Int64, Boolean)

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

TryStartNoGCRegion(Int64, Int64)

Пытается запретить сборку мусора во время выполнения критического пути, если указанный объем памяти доступен для кучи больших объектов и для кучи маленьких объектов.

TryStartNoGCRegion(Int64, Int64, Boolean)

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

WaitForFullGCApproach()

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

WaitForFullGCApproach(Int32)

Возвращает состояние зарегистрированного уведомления в пределах указанного времени ожидания, чтобы определить, является ли неизбежной полная блокировка сборки мусора средой CLR.

WaitForFullGCApproach(TimeSpan)

Возвращает состояние зарегистрированного уведомления в пределах указанного времени ожидания, чтобы определить, является ли неизбежной полная блокировка сборки мусора средой CLR.

WaitForFullGCComplete()

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

WaitForFullGCComplete(Int32)

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

WaitForFullGCComplete(TimeSpan)

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

WaitForPendingFinalizers()

Приостанавливает текущий поток до тех пор, пока поток, обрабатывающий очередь методов завершения, не обработает всю очередь.

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

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