Метод SuppressFinalize
SuppressFinalize говорит
сборщику не вызывать
~TypeName для экземпляра.
Вызов не бросает. Порядок финализации
не фиксирован - в примере не ждут
строку из деструктора. Рядом -
KeepAlive
и
GC.
Синтаксис
GC.SuppressFinalize(obj);
Пример
Давайте отменить финализацию объекта:
using System;
class WithFinalizer
{
~WithFinalizer() { }
}
class Program
{
static void Main()
{
var obj = new WithFinalizer();
GC.SuppressFinalize(obj);
Console.WriteLine("abcde");
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте вызвать метод для обычного объекта без финализатора:
using System;
class Program
{
static void Main()
{
object obj = new object();
GC.SuppressFinalize(obj);
Console.WriteLine("abcde");
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте вызвать метод и сразу прочитать поле:
using System;
class Holder
{
public int Value = 12345;
~Holder() { }
}
class Program
{
static void Main()
{
var obj = new Holder();
GC.SuppressFinalize(obj);
int res = obj.Value;
Console.WriteLine(res);
}
}
Результат выполнения кода:
12345
Смотрите также
-
метод
KeepAlive,
удержать объект -
метод
Collect,
сборка мусора -
GC,
класс сборщика -
WeakReference,
слабая ссылка