Так что у меня это просто Белл класс, который я тестирую сбор мусора на:Сбор мусора - один работает, но не другой, как получилось?
public class Bell
{
public void Ring()
{
Console.WriteLine("Ding ding");
}
}
Если я запускаю этот сегмент кода ниже, он не получает мусор, собранные
class Program
{
private static WeakReference reference;
private static void Main()
{
Console.WriteLine("Starting");
var bell = new Bell();
reference = new WeakReference(bell);
bell = null;
GC.Collect();
Console.WriteLine("Object still alive: {0}", reference.IsAlive);
if (reference.Target == null)
{
Console.WriteLine("Bell is no more!");
}
else
{
{
var theBell = (Bell)reference.Target;
theBell.Ring();
}
}
Console.ReadLine();
}
}
Если я однако только проверить reference.IsAlive, как показано ниже, это мусора
class Program
{
private static WeakReference reference;
private static void Main()
{
Console.WriteLine("Starting");
var bell = new Bell();
reference = new WeakReference(bell);
bell = null;
GC.Collect();
Console.WriteLine("Object still alive: {0}", reference.IsAlive);
Console.ReadLine();
}
}
Может вы, ребята, объясните мне, как это работает?
Это работает для меня в LINQPad, но когда я пробовал его в VS 2013, он всегда собирался - debug/release, .NET 3.5, 4.0, 4.5, 4.5.1 – Ondra