2009-06-14 96 views
2

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

回答

3

最简单的答案是你不能。 .Net GC是自调整的,它会热切地保留内存,但它不会在内存需要时才提交内存,当内存不再需要时,它会被重新保留。

GC uncommit机器上存在高存储压力时的记忆。

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

6

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

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

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

+1

我知道什么是承诺和保留的意思。问题在于用户经常抱怨.NET应用程序的内存使用率过高,我想以某种方式隐藏它。 – wj32 2009-06-14 07:06:32