gpt4 book ai didi

c# - GC如何清理结构?

转载 作者:太空宇宙 更新时间:2023-11-03 18:47:19 24 4
gpt4 key购买 nike

我认为 GC 可能会区别对待引用类型和值类型。

如果没有人引用它,GC 将收集引用类型。什么时候GC会像struct一样收集值类型?我的结构不小。我希望尽早收集它。用一个profiler软件,看到struct有很大的积累,是内存消耗大户。

最佳答案

如果一个结构是一个实例/静态字段,或者作为另一个对象的一部分,或者装箱,或者在数组中,那么它只会在托管堆中(即它可以被垃圾收集的地方)1 。它在托管堆中永远不会“裸露”——您可以获得的最接近的是一个装箱值。

如果你有一个大结构,那是你的第一个问题。你为什么要创造这样的东西?结构应该几乎总是很小(经验法则通常是 32 字节),否则每次您将它用作方法参数或将其分配给另一个变量时,您最终都会复制它。

您是否考虑过改用类?


1 正如 Eric Lippert 喜欢指出的那样,the stack is an implementation detail .此外,在某些情况下,局部变量最终会作为自动生成类中的字段...但我认为这与这个问题有些无关。

关于c# - GC如何清理结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3303418/

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