А будет ли сборка мусора? - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет! Посмотрите внимательно на следующий код:
namespace Temp
{
   public class Program
   {
      public static void Main(string[] args)
      {
         SomeEnum a = SomeEnum.a;
         SomeEnum b = SomeEnum.b;
         while(true)
         {
            bool res = a.Equals(b);
         }
      }
 
      public enum SomeEnum
      {
         a,
         b,
      }
   }
}
И ответьте на три вопроса:
  1. Будет ли этот код инициализировать сборку мусора поколения 0? Если будет, то почему? Если не будет, то почему?
  2. А будет ли сборка мусора поколения 1? Тоже обосновать.
  3. А как насчёт сборки поколения 2? Обосновать.

Не по теме:

Для честности код не тестить. only for fans.

Решение задачи: «А будет ли сборка мусора?»

textual
Листинг программы
using System;
using System.Runtime.CompilerServices;
 
namespace Temp
{
   public class Program
   {
      public static void Main(string[] args)
      {
         long count = 0;
         int n1 = 10;
         while(true)
         {
            int n2 = Boxing(n1);
            ++count;
            if(GC.CollectionCount(1) > 0)
            {
               //Падаем тут
               throw new Exception($"Gen0 = {GC.CollectionCount(0)}, count = {count}");
            }
         }
      }
 
      [MethodImpl(MethodImplOptions.NoInlining)]
      public static int Boxing(int n)
      {
         object obj = n;
         if(GC.GetGeneration(obj) != 0)
         {
            //Это исключение не бросается
            throw new Exception();
         }
         //без этого костыля компилятор вырезает боксинг и возвращает напрямую параметр n
         return (int)Transited(obj);
      }
 
      [MethodImpl(MethodImplOptions.NoInlining)]
      public static object Transited(object obj)
      {
         return obj;
      }
   }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы