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
}
C'est .NET 3.5 SP1
Quelqu'un peut-il me dire pourquoi ce test échoue?WeakReference Bug?
Modifier: Merci stusmith
Vous avez une référence à une chaîne, qui, depuis qu'il est une constante, est probablement interné (c.-à-pas dynamiquement alloués), et ne sera jamais recueilli .
C'était tout. Changement de première ligne à
var wr = new WeakReference(new object());
et le test passe :-)
vous pouvez réellement vérifier le second en changeant la référence faible à cela. var wr = new WeakReference (nouveau Random(). Suivant (50) .ToString()); Vous verrez alors la passe d'essai – mhoward