gpt4 book ai didi

.net - GC.Collect仅在第2代和大对象堆上

转载 作者:行者123 更新时间:2023-12-04 05:11:04 41 4
gpt4 key购买 nike

在我的应用程序中,有一个特定时间同时释放多个大对象。当时我想专门针对大对象堆(LOH)进行垃圾收集。

我知道您无法执行此操作,必须调用GC.Collect(2),因为仅在LOH执行第2代收集时才在LOH上调用GC。但是,我在文档中已经读到,调用GC.Collect(2)仍将在第1代和第0代上运行GC。

是否可以强制GC仅收集第2代,而不包括第1代或第0代?

如果不可能,是否有理由采用这种方式设计GC?

最佳答案

这是不可能的。 GC的设计旨在使第2代集合始终也收集第0代和第1代。

编辑:在a GC developer's blog上找到此源:

Gen2 GC requires a full collection (Gen0, Gen1, Gen2 and LOH! Large objects are GC’ed at every Gen2 GC even when the GC was not triggered by lack of space in LOH. Note that there isn’t a GC that only collects large objects.) which takes much longer than younger generation collections.



编辑2 :从同一个博客的高效使用GC中 Part 1Part 2显然Gen0和Gen1集合比Gen2集合要快,因此在我看来,仅执行Gen2不会带来太大的性能优势。可能有更根本的原因,但我不确定。答案可能在该博客上的某篇文章中。

关于.net - GC.Collect仅在第2代和大对象堆上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1468847/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com