gpt4 book ai didi

c# - Large Object Heap Compaction,什么时候好?

转载 作者:可可西里 更新时间:2023-11-01 09:10:08 24 4
gpt4 key购买 nike

首先,多大才算大?有没有办法确定一个对象在堆中有多大?

.Net 4.5.1 带有此 LargeObjectHeapCompactionMode:

After the LargeObjectHeapCompactionMode property is set to GCLargeObjectHeapCompactionMode.CompactOnce, the next full blocking garbage collection (and compaction of the LOH) occurs at an indeterminate future time. You can compact the LOH immediately by using code like the following:

GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
GC.Collect();

据我所知,压缩 LOH 是一件坏事!那么,哪个最差呢?紧凑的 LOH 还是具有 LOH 碎片?

最佳答案

分配 >= 85 KB 进入 LOH。压缩 LOH 并不坏——只是 LOH 碎片不是绝大多数应用程序需要担心的事情,因此对于它们来说不值得压缩开销。

当您分配几个大对象并且它们都从地址空间的同一页获取,然后让其中一些对象被收集时,就会发生碎片。该页面中剩余的可用空间可能无法使用,因为它太小了,或者甚至只是“忘记”了,因为分配器永远不会重新考虑再次使用它。

最终,可供使用的干净页面越来越少,因此分配器将开始变慢,因为它会强制移动对象,甚至开始抛出 OutOfMemory 异常。压缩将这些对象移动到新页面,回收可用空间。

您的应用是否有这种对象使用模式?大多数没有。在 64 位平台上,您甚至可能不会注意到它,因为在它成为一个大问题之前,有相当多的地址空间需要碎片化。

关于c# - Large Object Heap Compaction,什么时候好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20035550/

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