【发布时间】:2018-06-12 07:51:17
【问题描述】:
所以我在玩 C# Garbage Collection 时发现了一件很奇怪的事情。
Random r = new Random();
byte inl = 0;
while(true)
{
inl = (byte)r.Next(0, 255);
Console.WriteLine(inl);
GC.Collect(0, GCCollectionMode.Forced, false, false);
}
我在主循环中有这段代码。如果没有 GC.Collect 函数,程序运行时需要大约 10MB 的 RAM。 但是使用 GC.Collect 函数,它使用 6MB 的 RAM 运行。
然后我的问题来了,为什么GC没有在变量写入控制台后自动删除?
【问题讨论】:
-
确实如此......只是不是在适合你的时候,而是在心情好的时候
-
你永远不知道 GC 何时真正开始清理
-
请注意,您看到的内存可能是
Console.WriteLine()分配的一些缓冲区。Random不分配变量,inl在堆栈中。 -
垃圾收集的整个想法是它通常不是确定性的,但它会在某个时候发生。触发器可能是经过的时间量、使用的一定数量的内存或其他东西。在您的示例中,您正在强制收集立即运行,而不是等待垃圾收集自行发生。
标签: c# garbage-collection