【发布时间】:2009-06-14 06:17:56
【问题描述】:
我的程序有 7,667,712 个字节的已提交堆,但它有 33,546,240 个保留的堆字节!我可以看到该程序使用了大约 44 MB 的私有字节。如何让 .NET GC 为托管堆保留更少的空间?
【问题讨论】:
标签: .net garbage-collection memory-management
我的程序有 7,667,712 个字节的已提交堆,但它有 33,546,240 个保留的堆字节!我可以看到该程序使用了大约 44 MB 的私有字节。如何让 .NET GC 为托管堆保留更少的空间?
【问题讨论】:
标签: .net garbage-collection memory-management
仅仅因为您的进程保留了内存,并不意味着它正在使用该内存。
在 Windows 中,保留内存意味着您的进程已将页面映射到 它的地址空间。通过提交这些保留页来分配物理内存。当然,即便如此,您也不一定要使用该内存,因为已提交的页面可以换出到页面文件,从而暂时释放底层物理内存。
简而言之,这不是您(通常)需要担心的事情。您要解决的问题是什么?
【讨论】:
最简单的答案是你不能。 .Net GC 是自调的,它会热切地保留内存,但是直到需要它才提交内存,当不再需要内存时,它会再次更改为保留。
当机器内存压力大时,GCuncommit内存。
33 MB 并不是那么大,因为默认情况下(如果您的进程是 32 位并且您正在运行工作站 GC 模式),您将有一个为小对象堆保留的默认段,即 16 MB。
【讨论】: