GC.GetTotalMemory()为什么报告大量的内存分配?
问题描述:
我一直在玩GC.GetTotalMemory()。当我在下面的例子中创建一个标题类型的局部变量时,所消耗的内存量增加了6276字节。这里发生了什么?GC.GetTotalMemory()为什么报告大量的内存分配?
class Program
{
enum Titles { Mr, Ms, Mrs, Dr };
static void Main(string[] args)
{
GetTotalMemory();
Titles t = Titles.Dr;
GetTotalMemory();
}
static void GetTotalMemory()
{
long bytes = GC.GetTotalMemory(true);
Console.WriteLine("{0}", bytes);
}
}
答
我认为这是因为分配器某处咬了一大块内存。它将用于多个对象。试试做:
GetTotalMemory();
Titles t = Titles.Dr;
GetTotalMemory();
Titles t2 = Titles.Mr;
GetTotalMemory();
看看会发生什么。
这里是我所看到的,和GetTotalMemory()不是那么天真:
GetTotalMemory();
Titles t = Titles.Dr;
GetTotalMemory();
输出:
12828
19484
这:
GetTotalMemory();
//Titles t = Titles.Dr;
GetTotalMemory();
输出:
12828
19484
其实你不应该注意的可用内存波动小:
于是耶稣说,渲染 因此凯撒的东西 是凯撒的;和对神的事 是上帝的
:)
6KB看起来的“庞大” – jalf 2010-04-02 11:26:03
一个奇怪的定义,如果'Console.WriteLine(...)'分配内存,它不会让我感到吃惊。 – bendin 2010-04-02 11:26:05
6KB是“巨大的”,因为人们期望的是正好增加0字节。 – 2010-04-02 11:35:02