当前位置:  开发笔记 > 编程语言 > 正文

如何增加.NET的堆大小?

如何解决《如何增加.NET的堆大小?》经验,为你挑选了2个好方法。

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



1> Dave Swersky..:

这个主题看起来就像你想要的那样.

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



2> Kelly S. Fre..:

据我所知,没有简单的方法可以使用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代码提供执行环境.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有