4
[TestMethod]
public void Memory()
{
var wr = new WeakReference("aaabbb");
Assert.IsTrue(wr.IsAlive);
GC.Collect();
GC.Collect();
GC.Collect();
GC.Collect();
GC.Collect();
Assert.IsFalse(wr.IsAlive); //<-- fails here
}
Это .NET 3.5 SP1
Может ли кто-нибудь сказать мне, почему этот тест не удается?Ошибка WeakReference?
Редактировать: Спасибо stusmith
У вас есть ссылка на строку, которой, поскольку она является постоянным, это вероятно интернированы (т.е. не динамически выделено), и никогда не будет собрано ,
Все было. Измененный первую строку
var wr = new WeakReference(new object());
и тест проходит :-)
вы можете проверить вторую, изменив слабую ссылку на это. var wr = new WeakReference (new Random(). Далее (50) .ToString()); Затем вы увидите пробный пропуск – mhoward 2015-04-01 19:00:42