来自 java 背景,我习惯的一件事是告诉 JVM 最大堆大小应该是多少。如果正在运行的程序试图吞咽超过允许的范围,而垃圾收集器无法释放更多资源,则会抛出 OutOfMemoryError 并且一切都会发生。所以设置最大堆大小在 Java 中很重要。
这适用于.net吗? 你能设置堆大小限制吗? CLR 是否会不断增长其堆,直到达到机器的物理极限?或者,由于某种微妙的原因,我的 Java 闪烁器阻止我看到,这在 .net 中不是问题吗?
最佳答案
除非您自己在进程中托管 CLR,否则您无法在 .Net 中设置最大堆大小。
编辑:
要控制 CLR 的内存分配,包括最大堆大小,您需要使用托管 api 来托管 clr,并专门使用“内存管理器接口(interface)”,一些入门信息可以在这里找到 MSDN Magazine, column CLR Inside Out : CLR Hosting APIs
编辑:回答你的问题,你为什么要控制内存分配或特别是最大堆大小,你通常不想,但是 如果 您正在编写一个类似于 SQL Server 或 IIS 或一些实时应用程序的应用程序,那么您将有一个很好的理由来控制内存,特别是避免分页,否则 CLR 本身和操作系统已经做得很好你的工作,剩下的就是确保你的应用程序使用最少的资源来让事情正常工作。
关于.net - 我可以(并且我曾经想要)在.net 中设置最大堆大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/301393/