GC如何清理结构?

5Yr*_*DBA 1 .net c#

我认为GC可能会以不同方式处理引用类型和值类型.

如果没有人参考,GC将收集参考类型.GC会收集类似struct的值类型吗?我的结构不小.我希望尽可能早地收集它.使用分析器软件,我看到结构有很大的积累,并且是主要的内存消耗.

Jon*_*eet 6

如果struct是实例/静态字段,或者是另一个对象的一部分,或者是盒装的,或者在数组1中,那么struct只能在托管堆中(即它可以被垃圾回收).托管堆中永远不会"裸露" - 您可以获得的最接近的是盒装值.

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

您是否考虑过使用课程?


1正如Eric Lippert喜欢指出的那样,堆栈是一个实现细节.此外,在某些情况下,局部变量最终会成为自动生成类中的字段......但我认为这与此问题有些无关.