Tengo un objeto, que vive para siempre. Estoy borrando todas las referencias que puedo ver, después de usarlo, pero aún no recogido. Su ciclo de vida es bastante sofisticado, así que no puedo estar seguro de que se hayan borrado todas las referencias.Buscar referencias al objeto en tiempo de ejecución
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);
¿Cómo puedo averiguar qué referencias ¿todavía tiene? ¿Por qué no se recoge?
Muéstranos tu código y es posible que podamos ayudarte. Tenga en cuenta que la recolección de basura no necesariamente ocurre inmediatamente. – Lazarus
Y creo que la verdadera pregunta es, ¿por qué te preocupas? Si está utilizando recursos Desechables, elimínelos cuando ya no los esté usando, limpie los recursos del sistema no administrados y tenga cuidado con el interrogatorio de cadenas. –
El código es: si (container.Controls.Count> 0) { \t \t \t \t controles var = nuevo Control [container.Controls.Count]; \t \t \t \t container.Controls.CopyTo (controles, 0); \t \t \t \t foreach (control var en los controles) { \t \t \t \t \t container.Controls.Remove (control); \t \t \t \t \t control.Disponer(); \t \t \t \t \t \t \t \t \t} \t \t \t \t controles = NULL; \t \t \t} GC.Collect(); GC.Collection (1); GC.Collection (2); GC.Collection (3); Pero todavía está en la memoria. Entonces, es que el acero tiene raíces. ¿Cómo puedo encontrar estas raíces? –