Не вызывается финализатор.
От: #John Европа https://github.com/ichensky
Дата: 29.11.18 11:56
Оценка:
Здравствуйте, почему в первом случае не вызывается финализатор?

using System;
using static System.Console;

namespace ConsoleApp4
{
    class FinalizableObject
    {
        ~FinalizableObject()
        {
            WriteLine(nameof(FinalizableObject));
        }
    }
    class Program
    {
        public static void func() {
            WriteLine(nameof(func));
            var a = new FinalizableObject() { };
        }

        static void Main(string[] args)
        {
            func();

            GC.Collect();
            GC.WaitForFullGCComplete();

            GC.Collect();
            GC.WaitForFullGCComplete();

            Console.Read();
        }
    }
}


Но во втором случае, финализатор вызывается ровно 1 раз как и положено.
class FinalizableObject
    {
        ~FinalizableObject()
        {
            WriteLine(nameof(FinalizableObject));
            Program.finalizableObject = this;
        }
    }
    class Program
    {
        public static FinalizableObject finalizableObject;

        public static void func() {
            WriteLine(nameof(func));
            var a = new FinalizableObject() { };
        }

        static void Main(string[] args)
        {
            func();

            GC.Collect();
            GC.WaitForFullGCComplete();

            GC.Collect();
            GC.WaitForFullGCComplete();

            Console.Read();
        }
Підтримати Україну у боротьбі з країною-терористом.

https://prytulafoundation.org/
https://u24.gov.ua/

Слава Збройним Силам України!!! Героям слава!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.