Тема: Об'єкт не хоче знищуватися (видалятися) ?

Є таки код

    class newclass
    {
        int count = 1000000;
        public List<int> i = new List<int>();
        public List<int> j = new List<int>();
        public newclass()
        {
            for (int n = 0; n < count; n++)
            {
                i.Add(n);
                j.Add(1000000 - n);
            }
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            var p = Process.GetCurrentProcess();

            long start_mem = GC.GetTotalMemory(true);

            {
                newclass nc = new newclass();

                nc = null;
            }

            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();

            double used_mem_median =
                (GC.GetTotalMemory(true) - start_mem);

            Console.WriteLine(
                "Size = " +
                used_mem_median
                );
            
            Console.ReadKey();
        }
    }

Я роблю перевірку (на прикладі коду що я додав у тему) на "витік пам'яті" згідно з інструкції що я найшов у статті, пункт 4
https://michaelscodingspot.com/find-fix … practices/

Встановив для створеного об'єкту ІД і перевіряю його в Immediate Window

На зображенні:
1) Створюю ІД
2) Перевіряю після виходу з дужок
https://i.ibb.co/zFpkpvz/f854.jpg

Результат - об'єкт існує. Питання: чому об'єкт не знищився ? Значення об'єкту встановлено в нуль, об'єкт знаходиться в локальній зоні видимості (в дужках), і він ніде не використовується.

Подякували: leofun011

2

Re: Об'єкт не хоче знищуватися (видалятися) ?

Так ви ж його і тримаєте.

In some app scenarios, the value of a variable may change even when the variable is out of scope, and you might want to watch it closely (for example, a variable may get garbage collected). You can track the variable by creating an Object ID for it in the Watch window.

https://docs.microsoft.com/en-us/visual … ew=vs-2019

Подякували: Betterthanyou, leofun012

3

Re: Об'єкт не хоче знищуватися (видалятися) ?

Ви зараз намагаєтеся створити примітивний Memory Profiler, але навіщо, якщо такі штуки уже існують?

Подякували: koala, leofun01, Betterthanyou3

4 Востаннє редагувалося Betterthanyou (28.05.2020 12:34:22)

Re: Об'єкт не хоче знищуватися (видалятися) ?

Torbins написав:

Ви зараз намагаєтеся створити примітивний Memory Profiler, але навіщо, якщо такі штуки уже існують?

Вони платні.
Мені потрібно під ASP NET (IIS). Наприклад https://www.red-gate.com/products/dotne … -profiler/ коштує $515. Компанія не захоче купувати цю програм тільки заради того щоб знайти баг

5

Re: Об'єкт не хоче знищуватися (видалятися) ?

Ну можна ж місяць тріалкою покористуватися, оцінити, так би мовити, в бойових умовах.

6

Re: Об'єкт не хоче знищуватися (видалятися) ?

Проблеми з памятью можна проаналізувати після того як зробити дамп памяті, для цього існують безкоштоні додатки.
наприклад деякі описані тут: https://www.raymond.cc/blog/how-to-anal … -dmp-file/