.NET承诺与预留堆大小

时间:2009-06-14 06:17:57

标签: .net garbage-collection memory-management

我的程序有7,667,712个字节的已提交堆,但它有33,546,240个保留堆字节!我可以看到该程序使用大约44 MB的专用字节。如何让.NET GC为托管堆保留更少的空间?

2 个答案:

答案 0 :(得分:6)

仅仅因为你的进程保留了内存,并不意味着它正在使用那个内存。

在Windows中,预留内存意味着您的进程已将页面映射到它的地址空间。通过提交这些保留页面来分配物理内存。当然,即使这样你也不一定使用那个内存,因为提交的页面可以换成页面文件,暂时释放底层的物理内存。

简而言之,这不是您(通常)需要担心的事情。你试图解决的问题是什么?

答案 1 :(得分:3)

最简单的答案是你不能。 .Net GC是自我调整的,它会急切地保留内存,但是在需要内存之前它不提交内存,当不再需要内存时,它会再次更改为保留。

当机器内存压力很高时,

GC 取消提交内存。

33 MB并不是那么大,因为默认情况下(如果您的进程是32位并且您正在运行工作站GC模式),您将为16 MB的小对象堆保留一个默认段。