.net - 我可以(并且我曾经想要)在.net 中设置最大堆大小吗?

标签 .net performance garbage-collection heap-memory

来自 java 背景,我习惯的一件事是告诉 JVM 最大堆大小应该是多少。如果正在运行的程序试图吞咽超过允许的范围,而垃圾收集器无法释放更多资源,则会抛出 OutOfMemoryError 并且一切都会发生。所以设置最大堆大小在 Java 中很重要。

这适用于.net吗? 你能设置堆大小限制吗? CLR 是否会不断增长其堆,直到达到机器的物理极限?或者,由于某种微妙的原因,我的 Java 闪烁器阻止我看到,这在 .net 中不是问题吗?

最佳答案

除非您自己在进程中托管 CLR,否则您无法在 .Net 中设置最大堆大小。

编辑:
要控制 CLR 的内存分配,包括最大堆大小,您需要使用托管 api 来托管 clr,并专门使用“内存管理器接口(interface)”,一些入门信息可以在这里找到 MSDN Magazine, column CLR Inside Out : CLR Hosting APIs

编辑:回答你的问题,你为什么要控制内存分配或特别是最大堆大小,你通常不想,但是 如果 您正在编写一个类似于 SQL Server 或 IIS 或一些实时应用程序的应用程序,那么您将有一个很好的理由来控制内存,特别是避免分页,否则 CLR 本身和操作系统已经做得很好你的工作,剩下的就是确保你的应用程序使用最少的资源来让事情正常工作。

关于.net - 我可以(并且我曾经想要)在.net 中设置最大堆大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/301393/

相关文章:

c# - WPF 中的自定义内容控件

java - BigDecimal 构造函数性能 - 字符串与数字

java - 如何在计算大量矩阵时使用内存

java - 如何对 java 垃圾收集器进行微基准测试?

java - WeakReference 没有收集在大括号中?

.net - 在程序集“SMSApp”中找到了多个迁移配置类型。指定要使用的名称

.net - .NET 中发生垃圾收集时是否有事件?

c# - LINQ to Entities 区分大小写比较

php - in_array vs strpos 在 php 中的性能

java - 了解幸存世代指标