Блокировать сборщик мусора при анализе слабых ссылок - PullRequest
5 голосов
/ 30 мая 2011

Я экспериментирую с WeakReference и пишу код, который проверяет допустимость слабой ссылки, прежде чем возвращать сильную ссылку на объект.

if (weakRef.IsValid)
    return (ReferencedType)weakRef.Target;
else
    // Build a new object

Как я должен предотвратить сбор GC объекта между вызовами "IsValid" и "Target"?

1 Ответ

7 голосов
/ 30 мая 2011

Вместо этого вы должны сделать что-то вроде этого:

var rt = weakRef.Target as ReferencedType;

if (rt != null)
    // You now have a strong reference that you can safely use

Если вам удастся получить надежную ссылку, то вы уверены, что она не будет собрана GC.Более полный пример представлен на странице MSDN WeakReference , и если вы еще не прочитали его, вы также можете найти следующее:

Слабые ссылки

...