У меня есть объект, который живет вечно. Я удаляю все ссылки, которые я вижу, к нему после использования, но он все еще не собран. Его жизненный цикл довольно сложный, поэтому я не могу быть уверенным, что все ссылки были очищены.Найти ссылки на объект во время выполнения
if (container.Controls.Count > 0)
{
var controls = new Control[ container.Controls.Count ];
container.Controls.CopyTo(controls, 0);
foreach (var control in controls)
{
container.Controls.Remove(control);
control.Dispose();
}
controls = null;
}
GC.Collect();
GC.Collect(1);
GC.Collect(2);
GC.Collect(3);
Как я могу узнать, какие ссылки у него есть? Почему он не собирается?
Покажите нам свой код, и мы сможем вам помочь. Имейте в виду, что сбор мусора не обязательно происходит немедленно. – Lazarus
И я думаю, что реальный вопрос в том, почему вы беспокоитесь об этом? Если вы используете одноразовые ресурсы, удалите их, когда вы их больше не используете, очистите неуправляемые системные ресурсы и следите за ходом строки. –
Код: , если (container.Controls.Count> 0) { \t \t \t \t управления вар = новый контроль [container.Controls.Count]; \t \t \t \t container.Controls.CopyTo (органы управления, 0); \t \t \t \t Еогеасп (управление вар в контрольной группе) { \t \t \t \t \t container.Controls.Remove (контроль); \t \t \t \t \t control.Dispose(); \t \t \t \t \t \t \t \t \t} \t \t \t \t управляет = NULL; \t \t \t} GC.Collect(); GC.Collect (1); GC.Collect (2); GC.Collect (3); Но это все еще в памяти. Так что это мешает, что у него стали корни. Как я могу найти эти корни? –