既然建议对大对象使用 IDisposal 模式,我想知道为什么似乎没有可靠的方法来确定限制,从哪个对象被认为是“大”的?
在内部存在这样的区别:在 LOH 上分配的对象的下限。每当它以 85k 的形式公开传达时,就会同时阻止一个人依赖该数字。
特别是对于处理大量“更大”数组的应用程序,为了实现正确的内存管理和防止 LOH 碎片,必须需要该限制。另一方面,对于“较小”的数组,从内存消耗的角度来看,IDisposal 没有意义。在这里,压缩 GC 做得更好。
为什么没有这样的东西
GC.GetLOHLimit()
甚至更好:
bool GC.ArrayTargetForManualDisposal(Type type, int length);
编辑:我知道,IDisposable 模式只是建议正确处理特殊对象(fe“大”或非托管对象)。我的问题不是假设,运行时会对这些对象进行任何特殊处理。我宁愿要求对模式的实现者(也可能是其他人)提供运行时支持,以了解对象何时应该遵循特殊的内存管理。