.NET закрепление дескриптора в дамп памяти без взаимодействия или исправлено - PullRequest
2 голосов
/ 13 марта 2019

Я исследую дамп памяти из производства и вижу множество ссылок с «Ручкой закрепления», как вы можете видеть на скриншоте ниже (из Jetbrains dotMemory).Мы не используем фиксированный и не делаем ничего с неуправляемыми ресурсами вокруг этого кода, поэтому я хотел бы спросить, как это возможно?Класс SiteManager является одноэлементным, поэтому в коде есть поле

private static SiteManager _instance;

, которое всегда сохраняет ссылку на этот объект.Но я не вижу никакой причины, по которой это могло бы вызвать закрепление.

enter image description here

1 Ответ

1 голос
/ 15 марта 2019

Скорее всего, массив объектов является одним из внутренних объектов CLR, используемых для хранения статических ссылок.Так что это не ваш объект закреплен, это массив, в котором хранятся статические ссылки.

[EDIT] Я сказал «скорее всего», потому что я не знаю вашу программу.Если вы, как автор этой программы, уверены, что это не «ваш» object[], это наверняка массив, сохраняющий «статическую ссылку GC root».

Здесь и здесь Вы можете прочитать немного о корнях GC

Но в массиве объектов нет ничего, потому что он кажется внутренним.NET детали реализации.Я знаю об этом из своего опыта разработчика dotMemory.

...