Я хочу проверить ссылки на объекты, удерживаемые неправильно, и написал тест, который всегда терпел неудачу.Я упростил тест до следующего поведения:
[Test]
public void ScopesAreNotLeaking()
{
WeakReference weakRef;
Stub scope = null;
using (scope = new Stub())
{
weakRef = new WeakReference(scope);
}
scope = null;
GC.Collect();
GC.WaitForPendingFinalizers();
Assert.That(weakRef.Target, Is.Null);
}
Однако этот тест, который делает то же самое без использования, проходит:
[Test]
public void ScopesAreNotLeaking()
{
WeakReference weakRef;
Stub scope = new Stub();
weakRef = new WeakReference(scope);
scope = null;
GC.Collect();
GC.WaitForPendingFinalizers();
Assert.That(weakRef.Target, Is.Null);
}
Используемый класс заглушки достаточно прост:
class Stub : IDisposable
{
public void Dispose() {}
}
Может кто-нибудь объяснить мне, что поведение или - даже лучше - есть идея, как убедиться, что объект получает мусор?
PS: потерпите меня, если был задан похожий вопросдо.Я изучил только те вопросы, в которых использует в заголовке.