假设您有一个用c#
编写的应用程序(单个进程)默认情况下,应用程序正在分配巨大的虚拟内存,远远超过它的需要(例如驻留内存大约为10mb,而虚拟内存大约为几GB)。
在Java中,可以使用一个选项来限制java -mx128m
如何为.net / mono应用程序执行相同操作?并且红利问题:是否可以强制/更改GC选项以始终保持尽可能低的内存使用率(收集为尽快,不是在系统内存不足时)
基本上我的目标是创建一个内存占用最小的.net应用程序
编辑:为了使其更清楚,我插入了这个场景,因为几乎每个.net应用程序似乎都有类似的问题:
我运行monodevelop,它是单声道下的c#应用程序 - 它吃 1800 MB的虚拟内存,而它只使用 291 MB 驻留内存。这意味着该应用程序仅使用少于300mb的内存,但由于未知原因它要求1800MB。这个原因是我想要发现的,以及如何防止它这样做。
对于大多数用户来说,这可能不是问题,但是当任务受到虚拟内存限制时,在SGE等集群上运行的应用程序可能会出现问题。
答案 0 :(得分:3)
Mono有几个用于设置内存上限的标志,如java。例如,当我运行我的集群作业时,我设置了以下环境变量。
setenv MONO_GC_PARAMS max-heap-size = 8G
您可以在此处查看此问题中提供的更多选项:
Mono GC max-heap-size isn't documented. Is it safe to use in production?