我可以配置我的C#应用程序将其内存消耗限制为200MB吗? IOW,我不想等待自动GC(这似乎允许堆增长远远超过此应用程序实际需要的)。
我知道在Java中有一个命令行开关,你可以传递给实现这个目的的JVM。在C#中是否有相同的东西?
P.S。
我知道我可以从代码中调用GC,但这是我不想定期做的事情。我宁愿在启动时以某种方式设置它并忘记它。
答案 0 :(得分:4)
我不知道常规CLR的任何此类选项。我想如果你实现自己的CLR主机,你可以控制它。
但是,我不同意你对堆如何增长的评估。堆增长是因为您的应用程序正在分配并保留对象。
您可以采取一些措施来限制内存使用量。请参阅此问题以获得一些输入:Reducing memory usage of .NET applications?
答案 1 :(得分:2)
内存管理器让主机 提供一个接口,通过它 CLR将请求所有内存 分配。它取代了两者 Windows®内存API和标准 C CLR分配例程。此外, 接口允许CLR通知 主持人的后果 没有特定的分配(为 例如,内存分配失败 从持有锁的线程可能有 某些可靠性后果)。它 还允许主机自定义 CLR对分配失败的回应, 范围从OutOfMemoryException 被抛到一边 这个过程被拆除了。主人 也可以使用此经理重新获得 来自CLR的内存卸载 未使用的应用域和强制垃圾 采集。内存管理器 接口列在
中
来源及更多:http://msdn.microsoft.com/en-us/magazine/cc163567.aspx#S2
修改:
我实际上不会建议你自己管理内存,因为你会有更多的内容,你可能会遇到更多的问题,而CLR完全可以完成这项任务。
但如果你说我自己处理事情对我来说非常重要,那么我什么都不能。
答案 2 :(得分:1)
我没有试过这个,但你可以尝试调用SetProcessWorkingSetSizeEx传递正确的标志来强制你的进程永远不会得到更多的内存。我不知道GC是否会考虑到这一点并更频繁地清理,或者你是否只是获得OutOfMemoryExceptions。