限制C#应用程序中托管堆的大小

我可以配置我的C#应用​​程序将其内存消耗限制为200MB吗? IOW,我不想等待自动GC(这似乎允许堆增长远远超过此应用程序实际需要的)。

我知道在Java中有一个命令行开关,你可以传递给实现这个的JVM .. C#中是否有相同的东西?

PS

我知道我可以从代码中调用GC,但这是我不想定期做的事情。 我宁愿在启动时以某种方式设置它并忘记它。

我不知道常规CLR的任何此类选项。 我想如果你实现自己的CLR主机,你可以控制它。

但是,我不同意你对堆如何增长的评估。 堆增长是因为您的应用程序正在分配并保留对象。

您可以采取一些措施来限制内存使用量。 请参阅此问题以获得一些输入: 减少.NET应用程序的内存使用量?

内存管理器允许主机提供一个接口,CLR将通过该接口请求所有内存分配。 它取代了Windows®内存API和标准C CLR分配例程。 此外,该接口允许CLR通知主机失败特定分配的后果(例如,从持有锁的线程中失败的内存分配可能具有某些可靠性后果)。 它还允许主机自定义CLR对失败分配的响应,范围从OutOfMemoryException一直向上抛出整个进程被拆除。 主机还可以使用此管理器通过卸载未使用的应用程序域并强制进行垃圾回收来从CLR重新获取内存。 内存管理器接口列在

来源和更多: http : //msdn.microsoft.com/en-us/magazine/cc163567.aspx#S2

编辑:

我实际上不会建议你自己管理内存,因为你会得到更多,你可能会遇到更多问题,而CLR完全可以完成这项任务。

但如果你说我自己处理事情对我来说非常重要,那么我什么都不能。

我没有试过这个,但你可以尝试调用SetProcessWorkingSetSizeEx传递正确的标志来强制你的进程永远不会得到更多的内存。 我不知道GC是否会考虑到这一点并更频繁地清理,或者你是否会获得OutOfMemoryExceptions。