我的程序有7,667,712个字节的已提交堆,但它有33,546,240个保留堆字节!我可以看到该程序使用大约44 MB的专用字节。如何让.NET GC为托管堆保留更少的空间?
答案 0 :(得分:6)
仅仅因为你的进程保留了内存,并不意味着它正在使用那个内存。
在Windows中,预留内存意味着您的进程已将页面映射到它的地址空间。通过提交这些保留页面来分配物理内存。当然,即使这样你也不一定使用那个内存,因为提交的页面可以换成页面文件,暂时释放底层的物理内存。
简而言之,这不是您(通常)需要担心的事情。你试图解决的问题是什么?
答案 1 :(得分:3)
最简单的答案是你不能。 .Net GC是自我调整的,它会急切地保留内存,但是在需要内存之前它不提交内存,当不再需要内存时,它会再次更改为保留。
当机器内存压力很高时,GC 取消提交内存。
33 MB并不是那么大,因为默认情况下(如果您的进程是32位并且您正在运行工作站GC模式),您将为16 MB的小对象堆保留一个默认段。