В чем разница между GC.GetTotalMemory (false) и GC.GetTotalMemory (true) - PullRequest
3 голосов
/ 06 апреля 2010

Может кто-нибудь сказать мне разницу между GC.GetTotalMemory (false) и GC.GetTotalMemory (истина);

У меня есть небольшая программа, и когда я сравнил результаты первого цикла дает пут-пут <счетчик циклов 0 Diff = 32> для GC.GetTotalMemory (true); и <число циклов 0 Diff = 0> для GC.GetTotalMemory (false); но разве не должно быть иначе?

Smilarly остальные петли печатают некоторые числа, которые различны для обоих случаев. что означает это число. Почему оно меняется с увеличением цикла?

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace test
{   
   struct Address
   {
       public string Street;
   }
   class Details
   {
      public string Name ;
      public Address address = new Address();

   }
   class emp :IDisposable
   {
       public Details objb = new Details();       
       bool disposed = false;
       #region IDisposable Members
       public void Dispose()
       {
           Disposing(true);
       }
       void Disposing(bool disposing)
       {
           if (!disposed)
               disposed = disposing;
           objb = null;           
           GC.SuppressFinalize(this);
       }

       #endregion
   }


    class Program
    {       
        static void Main(string[] args)
        {        
           long size1 = GC.GetTotalMemory(false);
           emp empobj = null;          
           for (int i = 0; i < 200;i++ )
           {
              // using (empobj = new emp()) //------- (1)
               {
                   empobj = new emp(); //------- (2)
                   empobj.objb.Name = "ssssssssssssssssss";
                   empobj.objb.address.Street = "asdfasdfasdfasdf";
               }

              long size2 = GC.GetTotalMemory(false);             
              Console.WriteLine( "loop count " +i + "  Diff = " +(size2-size1));

           }
        }

    }
}

Ответы [ 2 ]

5 голосов
/ 06 апреля 2010

Параметр определяет, следует ли ожидать запуска сборки мусора full перед запуском или нет.

См. MSDN : Параметры

forceFullCollection
Тип: System.Boolean
Значение true, чтобы указать, что этот метод может ожидать сборки мусора перед возвратом; в противном случае - ложь.

Причиной того, что diff все еще равен 0, может быть то, что GC уже произошел, даже если вы передали false.

1 голос
/ 06 апреля 2010

В любом случае GC.GetTotalMemory() является оценкой, поэтому вам не стоит беспокоиться о разнице в 32 байта ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...