【发布时间】:2009-09-23 22:23:47
【问题描述】:
在我的应用程序中,有一段时间会同时释放大量大型对象。那时我想专门对大对象堆(LOH)进行垃圾收集。
我知道您不能这样做,您必须调用GC.Collect(2),因为只有在进行第 2 代收集时,才会在 LOH 上调用 GC。但是,我在文档中读到调用 GC.Collect(2) 仍会在第 1 代和第 0 代上运行 GC。
是否可以强制 GC仅收集 gen 2,而不包括 gen 1 或 gen 0?
如果不可能,是否有理由这样设计 GC?
【问题讨论】:
-
为什么要这样做,即不从 gen 0 或 1 收集? .NET GC 在其自己的设备上运行得最好。
-
我知道这一点。基本上,您永远不想手动强制 GC,因为它们是密集操作。既然是这样,当我看到需要运行 GC 时,我希望它只针对特定的代运行,而不是执行完整的 GC。我正在尝试对 GC 的使用更加挑剔,但它不允许我这样做。
标签: .net garbage-collection large-object-heap