Когда мы анализируем кучи памяти, следуя 4 типам ручек GC, мы обычно сталкиваемся:
-
Слабый: - Слабая рукоятка GC не будет препятствовать тому, чтобы экземпляр, который он соответствует, был собран из мусора.
Example, used by the System.WeakReference class instances
. -
Обычный: - Обычная ручка GC предотвращает сбор соответствующего мусора.
Example, used by the instances of strong references
. -
RefCounted: - Контрольная метка GC, используемая по ссылке, используется внутренне с помощью среды выполнения,
example, when dealing with COM interfaces.
-
Pinned: - Зачем нам нужен такой ручка GC? Это просто для того, чтобы избежать перемещения этого экземпляра в памяти или
is there any other notion behind this? I want to know the notion behind Pinned GC handle(with an example).
Отредактировано для ответа Itay: - У меня есть пустой массив - DiffCell [] [], привязанный к сетке данных в WPF. Когда я закрываю окно, в котором присутствует эта сетка данных, я вижу, что дескриптор Pinned GC указывает на этот пустой массив DiffCell через объект [] (см. Снимок). I am not using any unsafe code. I am just setting ItemsSource of data grid to null before closing that window. So my question is who does pin this array on heap and why?