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 Bug?
編輯:謝謝stusmith
你有一個參考爲一個字符串, 它,因爲它是一個常數,是 可能扣留(即不是動態 分配),並且將永遠不會被 收集。
就是這樣。改變第一行
var wr = new WeakReference(new object());
和測試通過:-)
你可以通過改變弱引用來驗證第二個。 var wr = new WeakReference(new Random()。Next(50).ToString());你會看到測試通過 – mhoward 2015-04-01 19:00:42