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
Примеры
В следующем примере используется несколько методов GC для получения сведений о создании и памяти блока неиспользуемых объектов и его печати в консоли. Затем собираются неиспользуемые объекты и отображаются итоговые данные памяти.
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 для GC.
Свойства
| Имя | Описание |
|---|---|
| MaxGeneration |
Получает максимальное число поколений, поддерживаемых системой. |
Методы
| Имя | Описание |
|---|---|
| AddMemoryPressure(Int64) |
Сообщает среде выполнения большого выделения неуправляемой памяти, которая должна учитываться при планировании сборки мусора. |
| AllocateArray<T>(Int32, Boolean) |
Выделяет массив. |
| AllocateUninitializedArray<T>(Int32, Boolean) |
При возможности выделяет массив, пропуская ноль-инициализацию. |
| CancelFullGCNotification() |
Отменяет регистрацию уведомления о сборке мусора. |
| Collect() |
Заставляет немедленную сборку мусора всех поколений. |
| Collect(Int32, GCCollectionMode, Boolean, Boolean) |
Принудительно создает сборку мусора от поколения 0 до указанного поколения, задается GCCollectionMode значением со значениями, указывающими, должна ли коллекция блокироваться и сжиматься. |
| Collect(Int32, GCCollectionMode, Boolean) |
Принудительно создает сборку мусора от поколения 0 до указанного поколения, задается значением GCCollectionMode , указывающим, должна ли коллекция блокироваться. |
| Collect(Int32, GCCollectionMode) |
Принудительно выполняет сборку мусора от поколения 0 до указанного поколения, за раз, указанного значением GCCollectionMode . |
| Collect(Int32) |
Принудительно выполняет немедленную сборку мусора от поколения 0 до указанного поколения. |
| CollectionCount(Int32) |
Возвращает количество попыток сборки мусора для указанного поколения объектов. |
| EndNoGCRegion() |
Заканчивается режим задержки региона GC. |
| GetAllocatedBytesForCurrentThread() |
Возвращает общее количество байтов, выделенных текущему потоку с начала его существования. |
| GetConfigurationVariables() |
Возвращает конфигурации, используемые сборщиком мусора. |
| GetGCMemoryInfo() |
Возвращает сведения о памяти сборки мусора. |
| GetGCMemoryInfo(GCKind) |
Возвращает сведения о памяти сборки мусора. |
| GetGeneration(Object) |
Возвращает текущее число поколения указанного объекта. |
| GetGeneration(WeakReference) |
Возвращает текущее число поколения целевого объекта указанной слабой ссылки. |
| GetTotalAllocatedBytes(Boolean) |
Возвращает количество байтов, выделенных в течение всего времени существования процесса. Возвращаемое значение не включает собственные выделения. |
| GetTotalMemory(Boolean) |
Извлекает размер кучи, за исключением фрагментации. Например, если общий размер кучи GC составляет 100 мб и фрагментация, т. е. пространство, занятое свободными объектами, занимает до 40 мб, этот API будет сообщать 60 мб. Параметр указывает, может ли этот метод ожидать короткого интервала перед возвратом, чтобы разрешить системе собирать объекты мусора и завершить их. |
| GetTotalPauseDuration() |
Возвращает общее время приостановки в GC с начала процесса. |
| KeepAlive(Object) |
Ссылается на указанный объект, который делает его недопустимым для сборки мусора с начала текущей подпрограммы до точки вызова этого метода. |
| RefreshMemoryLimit() |
Указывает сборщику мусора перенастроить себя, обнаруживая различные ограничения памяти в системе. |
| RegisterForFullGCNotification(Int32, Int32) |
Указывает, что уведомление о сборке мусора должно возникать, когда условия предпочитают полную сборку мусора и когда коллекция завершена. |
| RegisterNoGCRegionCallback(Int64, Action) |
Регистрирует обратный вызов, вызываемый при выделении определенного объема памяти в регионе без GC. |
| RemoveMemoryPressure(Int64) |
Сообщает среде выполнения, что неуправляемая память была освобождена и больше не должна учитываться при планировании сборки мусора. |
| ReRegisterForFinalize(Object) |
Запрашивает, чтобы система вызывала метод завершения для указанного объекта, для которого SuppressFinalize(Object) был вызван ранее. |
| SuppressFinalize(Object) |
Запрашивает, чтобы среда CLR не вызывала метод завершения для указанного объекта. |
| TryStartNoGCRegion(Int64, Boolean) |
Пытается запретить сборку мусора во время выполнения критического пути, если доступно указанное количество памяти, и определяет, выполняет ли сборщик мусора полную блокировку сборки мусора, если недостаточно памяти изначально доступно. |
| TryStartNoGCRegion(Int64, Int64, Boolean) |
Пытается запретить сборку мусора во время выполнения критического пути, если указанный объем памяти доступен для большой кучи объектов и небольшой кучы объектов, и определяет, выполняет ли сборщик мусора полную блокировку сборки мусора, если недостаточно памяти изначально доступен. |
| TryStartNoGCRegion(Int64, Int64) |
Пытается запретить сборку мусора во время выполнения критического пути, если указанный объем памяти доступен для большой кучи объектов и кучи небольших объектов. |
| TryStartNoGCRegion(Int64) |
Пытается запретить сборку мусора во время выполнения критического пути, если доступен указанный объем памяти. |
| WaitForFullGCApproach() |
Возвращает состояние зарегистрированного уведомления о том, является ли полная блокировка сборки мусора средой CLR неминуема. |
| WaitForFullGCApproach(Int32) |
Возвращается в указанный период времени ожидания, состояние зарегистрированного уведомления о том, является ли полная блокировка сборки мусора средой CLR неминуема. |
| WaitForFullGCApproach(TimeSpan) |
Возвращается в указанный период времени ожидания, состояние зарегистрированного уведомления о том, является ли полная блокировка сборки мусора средой CLR неминуема. |
| WaitForFullGCComplete() |
Возвращает состояние зарегистрированного уведомления о том, завершена ли полная блокировка сборки мусора средой CLR. |
| WaitForFullGCComplete(Int32) |
Возвращается в указанный период времени ожидания, состояние зарегистрированного уведомления о том, завершена ли полная блокировка сборки мусора по общему языку среды выполнения. |
| WaitForFullGCComplete(TimeSpan) |
Возвращает состояние зарегистрированного уведомления о завершении блокирующей сборки мусора. Может ждать неограниченное время для полной коллекции. |
| WaitForPendingFinalizers() |
Приостанавливает текущий поток до тех пор, пока поток, обрабатывающий очередь завершения, опустил такую очередь. |