Слабая ссылка Ошибка? - PullRequest
       23

Слабая ссылка Ошибка?

4 голосов
/ 16 октября 2008
[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
Может кто-нибудь сказать мне, почему этот тест не проходит?

Редактировать : Спасибо, Стусмит

У вас есть ссылка на строку, который, поскольку он является константой, является вероятно интернированы (т.е. не динамически выделено), и никогда не будет собраны.

Вот и все. Первая строка изменена на

var wr = new WeakReference(new object());

и тест проходит: -)

1 Ответ

16 голосов
/ 16 октября 2008

Я могу думать о двух возможных причинах из головы:

  1. Вы работаете в режиме отладки. Ссылки в отладке длятся дольше, чем в выпуске, и, возможно, дольше, чем вы думаете.
  2. У вас есть ссылка на строку, которая, поскольку она является константой, вероятно, является интернированной (то есть не динамически размещаемой) и никогда не будет собрана.
...