也许是我,但我想知道这种(奇怪的)行为。
考虑下面的代码片段,它是说明效果的最小控制台程序。
class MyClass { }
class Program
{
static void Main(string[] args)
{
var x = new MyClass();
var y = new MyClass();
x = null;
GC.Collect();
Console.ReadKey();
}
}
当程序因按键而暂停时(或也通过放置断点),内存分析器显示仍有两个“MyClass”实例被引用。
GC.Collect()
没有帮助,也没有将程序作为“Release”运行。
MyClass
不应该尽快收集未引用的实例,至少通过强制 GC 收集?
注意:较大的控制台应用程序涉及一堆产生数据的线程,而类似 MyClass 的实例充当消费者。这些实例是通过 引用的WeakReference
,但这似乎不是问题。问题是我无法通过在 Main 方法中运行我的所有测试生命周期来丢弃消费者。
提前致谢。