我如何增加堆大小.NET?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

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

提问于
用户回答回答于

据我发现,没有简单的方法来控制使用CLR的.Net应用程序堆的大小。

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

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

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

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

用户回答回答于

这个线程看起来像你想要的。

如果我正确地阅读了MVP的帖子,在32位系统上,无论如何,只要1.5GB的堆大小,只要进程启动就可以完成所有操作。在64位系统上,你的堆基本上是无限的,我认为任何主流服务器或PC都不能容纳64位进程可以解决的物理内存。

扫码关注云+社区