如何增加.NET 的堆大小? [复制]
Posted
技术标签:
【中文标题】如何增加.NET 的堆大小? [复制]【英文标题】:How can I increase the heap size .NET? [duplicate] 【发布时间】:2010-10-14 03:11:55 【问题描述】:.NET 中是否存在与java -Xmx
内存大小分配相对应的内容?
【问题讨论】:
看看这个帖子:Maximum Heap size - 唯一的解决方案是插入更多内存。 【参考方案1】:据我所知,没有简单的方法可以使用 CLR 控制 .Net 应用程序的堆大小。
@Dave 答案中的链接只回答了一半。当我研究了同样的问题时,响应是“堆增长到使用所有可用内存”,好像这是您想要控制最大堆大小的唯一原因。
在(通常是 Java)服务器环境中,您不希望表现不佳的应用程序以牺牲其他托管应用程序为代价来占用内存。一个简单的解决方案是限制应用程序可用于其堆的内存量。这是通过 Java 的 -Xmx 参数完成的,因此您可以保证应用程序不会使用超出计划的内容,例如-Xmx256M。由于在初始化期间在堆上分配内存会减慢应用程序的启动速度,Java 使用 -Xms 参数来允许在初始化期间执行大量对象创建的应用程序以一大块堆开始,而不是 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 代码的执行提供环境。
【讨论】:
【参考方案2】:This thread 看起来正是您想要的。
如果我正确阅读了 MVP 的帖子,那么在 32 位系统上,无论如何,您都被限制为 1.5GB 堆大小,只要进程开始,您就会得到所有这些大小。在 64 位系统上,您的堆基本上是无限的,我认为任何主流服务器或 PC 都无法容纳 64 位进程可以处理的物理内存。
【讨论】:
如果你想将堆的大小限制在一个设定的范围内怎么办? 确保将程序集构建到 x64 或任何 CPU!如果您构建到 x86,那么即使在 x64 操作系统/硬件上,您也会有 1.5GB 的限制。 我认为 OP 正在询问如何将 .Net 应用程序的堆限制为仅使用 256MB。他在问是否有一个参数/配置/环境变量可以做到这一点,不一定只是增加堆。以上是关于如何增加.NET 的堆大小? [复制]的主要内容,如果未能解决你的问题,请参考以下文章