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() |
Приостанавливает текущий поток до тех пор, пока поток, обрабатывающий очередь методов завершения, не обработает всю очередь. |