在.NET中是否存在与java -Xmx
内存大小分配相对应的内容?
发布于 2009-03-18 16:56:41
This thread看起来正是您想要的。
如果我没看错MVP的帖子,在32位系统上,你的堆大小被限制为1.5 as,只要进程一开始,你就会得到所有的堆大小。在64位系统上,您的堆基本上是无限的,我认为任何主流服务器或PC都无法容纳64位进程所能处理的那么多物理内存。
发布于 2009-08-05 15:19:26
据我所知,没有一种简单的方法可以使用CLR来控制.Net应用程序的堆的大小。
@Dave答案中的链接只回答了这个问题的一半。当我研究同样的问题时,得到的响应是“堆增长到使用所有可用内存”,好像这是您想要控制最大堆大小的唯一原因。
在(通常是Java)服务器环境中,您不希望一个表现糟糕的应用程序以牺牲其他托管应用程序为代价来占用内存。一个简单的解决方案是限制应用程序可以用于堆的内存量。这是通过Java的-Xmx参数实现的,所以你可以保证应用程序不会超过计划的使用量,例如-Xmx256M。由于在初始化期间分配堆上的内存可能会减慢应用程序的启动速度,因此Java允许在初始化期间创建大量对象的应用程序从一大块堆开始,而不是-Xms在执行过程中不断调整堆的大小。
.NET的CLR不具备此功能。我怀疑这是因为.Net的CLR不是虚拟机。CLR恰好是一个API (我可以补充一下,它相当全面),它充当本机.dlls的适配器,当涉及到内存管理时,它等同于一种更像可执行文件的方法。
我问过这个关于SharePoint开发的问题,听说可以通过使用称为Web应用程序的IIS模块来控制堆的大小,这样你就可以告诉IIS限制给定web应用程序的内存。我想知道这是不是因为IIS有自定义的例程来替换/覆盖新的()/malloc()/etc,从而可以为客户端应用程序提供这种类型的控制。这意味着除非您想用C++编写一个自定义内存管理器并为.Net创建一个接口,否则独立的.Net应用程序就不太走运了
底线是CLR程序使用宿主进程设置的任何内存管理策略/控制。这就是为什么您必须在IIS中控制C#网页的内存使用情况,因为IIS实际上是一个宿主进程,它为CLR代码提供执行环境。
https://stackoverflow.com/questions/659119
复制相似问题