Метод KeepAlive
GC.KeepAlive создаёт
«использование» ссылки до конца
метода в точке вызова. После него
можно безопасно читать поля объекта.
Отмена финализатора -
SuppressFinalize.
Обзор -
GC.
Синтаксис
GC.KeepAlive(obj);
Пример
Давайте удержать объект и прочитать поле:
using System;
class Holder
{
public int Value = 12345;
}
class Program
{
static void Main()
{
var obj = new Holder();
GC.KeepAlive(obj);
int res = obj.Value;
Console.WriteLine(res);
}
}
Результат выполнения кода:
12345
Пример
Давайте вызвать метод между созданием и чтением:
using System;
class Box
{
public int Data = 7;
}
class Program
{
static void Main()
{
var box = new Box();
Use(box);
GC.KeepAlive(box);
int res = box.Data;
Console.WriteLine(res);
}
static void Use(Box b) { }
}
Результат выполнения кода:
7
Пример
Давайте удержать ссылку на
new object():
using System;
class Program
{
static void Main()
{
object obj = new object();
GC.KeepAlive(obj);
bool res = obj != null;
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Смотрите также
-
метод
SuppressFinalize,
без финализатора -
метод
Collect,
сборка мусора -
свойство
IsAlive,
жива ли цель -
GC,
класс сборщика