如何限制.net/mono进程的内存大小

Pet*_*etr 7 .net memory mono

想象你有一个用c#编写的应用程序(单个进程)

默认情况下,应用程序正在分配巨大的虚拟内存,远远超过其需要(例如,驻留内存大约为10mb,而虚拟内存大约为几GB).

在Java中,可以使用一个选项来限制它 java -mx128m

我怎么能为.net/mono应用程序做同样的事情?还有一个问题:是否可以强制/更改GC选项以始终保持尽可能低的内存使用率(尽快收集,而不是在系统内存不足时)

基本上我的目标是创建一个内存占用最小的.net应用程序

编辑:为了使它更清楚我插入这个场景,因为几乎每个.net应用程序似乎都有类似的问题:

我运行monodevelop,它是单声道下的c#应用程序 - 它占用1800 MB的虚拟内存,而它只使用291 MB的驻留内存.这意味着该应用程序仅使用少于300mb的内存,但由于未知原因它要求1800MB.这个原因是我想要发现的,以及如何防止它这样做.

对于大多数用户来说,这可能不是问题,但是当任务受到虚拟内存的限制时,在SGE等集群上运行的应用程序可能会出现问题.

evo*_*obe 3

Mono 有几个用于设置内存上限的标志,如 java.lang. 例如,当我运行集群作业时,我设置了以下环境变量。

setenv MONO_GC_PARAMS 最大堆大小=8G

您可以在此处查看此问题中可用的更多选项:

Mono GC max-heap-size 没有记录。在生产中使用安全吗?