【问题标题】:GC.GetGeneration() returns always 0 for int variable even after calling GC.Collect() in C#即使在 C# 中调用 GC.Collect() 之后,对于 int 变量,GC.GetGeneration() 也始终返回 0
【发布时间】:2021-01-21 06:10:26
【问题描述】:

下面是代码 sn-p,其中我在调用垃圾收集器之前和之后生成变量 int j

int j = 30;
WriteLine(GC.GetGeneration(j) );
GC.Collect();
WriteLine(GC.GetGeneration(j));

输出应该是

0
1

因为int j 在垃圾收集中幸存但我得到了

0
0

我不明白为什么会这样,因为int 也是 C# 中的一个对象。 PS:我试过在调试和发布模式下运行项目。

【问题讨论】:

标签: c# .net garbage-collection


【解决方案1】:

如 cmets 中所述。 int 是一种值类型,垃圾收集器不会跟踪它。由于GetGeneration 采用object,因此int 将为boxed。 IE。将创建一个新对象。该新对象将始终在 gen 0 中分配。下次您调用 GetGeneration 时会发生同样的事情。

所以你的结果符合预期。

【讨论】:

    猜你喜欢
    • 2013-09-05
    • 1970-01-01
    • 2016-08-31
    • 2012-07-14
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    相关资源
    最近更新 更多