В следующей программе размер начального размера памяти не восстанавливается, хотя выполняется сбор мусора. 1. Начальный размер памяти Общая память: 16,940 байт Частные байты 8134656
-
Созданные объекты в цикле, чтобы эти объекты были освобождены, когда gc collect выполняется вне цикла, поскольку эти объекты не имеют своей области.
-
Но память после сбора GC не совпадает с начальным размером Общая память: 29,476 байт Частные байты 8540160 Количество ручек: 115
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MemoryLeakTest
{
class Program
{
static void DisplayMemory()
{
Console.WriteLine("Total memory: {0:###,###,###,##0} bytes", GC.GetTotalMemory(true));
Console.WriteLine("Private bytes {0}", System.Diagnostics.Process.GetCurrentProcess().PrivateMemorySize64);
Console.WriteLine("Handle count: {0}", System.Diagnostics.Process.GetCurrentProcess().HandleCount);
Console.WriteLine();
}
static void Main()
{
DisplayMemory();
GC.Collect();
for (int i = 0; i < 5; i++)
{
Console.WriteLine("--- New object #{0} ---", i + 1);
object o = new object();
GC.Collect();
DisplayMemory();
}
Console.WriteLine("--- press any key to quit ---");
Console.WriteLine();
Console.Read();
GC.Collect();
DisplayMemory();
}
}
}
Output:
=======
Total memory: 16,940 bytes
Private bytes 8134656
Handle count: 115
--- New object #1 ---
Total memory: 25,588 bytes
Private bytes 8540160
Handle count: 115
--- New object #2 ---
Total memory: 25,576 bytes
Private bytes 8540160
Handle count: 115
--- New object #3 ---
Total memory: 25,576 bytes
Private bytes 8540160
Handle count: 115
--- New object #4 ---
Total memory: 25,576 bytes
Private bytes 8540160
Handle count: 115
--- New object #5 ---
Total memory: 25,576 bytes
Private bytes 8540160
Handle count: 115
--- press any key to quit ---
Total memory: 29,476 bytes
Private bytes 8540160
Handle count: 115
*********************************
В чем причина увеличения частных байтов и размера управляемой кучи от их начального размера?