如何增加.NET的堆大小?

时间:2009-03-18 16:48:10

标签: .net memory

.NET中是否存在与java -Xmx内存大小分配相对应的内容?

2 个答案:

答案 0 :(得分:12)

This thread看起来就像你想要的那样。

如果我正确地读取MVP的帖子,在32位系统上,无论如何,只要进程开始,你就可以获得1.5GB的堆大小。在64位系统上,您的堆基本上是无限的,我认为任何主流服务器或PC都不能容纳64位进程可以处理的物理内存。

答案 1 :(得分:6)

据我所知,没有简单的方法可以使用CLR控制.Net应用程序堆的大小。

@ Dave答案中的链接只有一半回答了这个问题。当我研究同样的问题时,响应是“堆增长以使用所有可用内存”,就好像这是您想要控制最大堆大小的唯一原因。

在(通常是Java)服务器环境中,您不希望行为不正常的应用程序以牺牲其他托管应用程序为代价来占用内存。一个简单的解决方案是限制应用程序可以为其堆使用的内存量。这是通过Java的-Xmx参数完成的,因此您可以保证应用程序不会使用超过计划的数量,例如: -Xmx256M。由于在初始化期间在堆上分配内存会降低应用程序启动速度,因此Java使用-Xms arg允许在初始化期间执行大量对象创建的应用程序从大块堆开始,而不是JVM大量调整堆的大小,因为它去。

.Net的CLR没有这种能力。我怀疑是因为.Net的CLR不是虚拟机。 CLR恰好是一个API(非常全面,我可能会添加),它作为本机.dll的适配器,等同于在内存管理方面更像是可执行文件的方法。

我已经问过这个关于SharePoint开发的问题,并且听说可以通过使用称为Web Apps的IIS模块来控制堆大小,从而可以告诉IIS限制给定Web应用程序的内存。我想知道这是不是因为IIS有自定义的例程来替换/覆盖new()/ malloc()/ etc,因此可以为客户端应用程序提供这种类型的控制。这意味着除非你想用C ++编写自定义内存管理器并为.Net创建一个接口,否则独立的.Net应用程序运气不佳。

底线是CLR程序使用托管过程所采用的任何内存管理策略/控制。这就是为什么你必须从IIS中控制C#网页的内存使用情况,因为IIS实际上是一个主机进程,它为CLR代码提供执行环境。