Ho un oggetto, che vive per sempre. Sto cancellando tutti i riferimenti che riesco a vedere, dopo averlo usato, ma non è ancora stato raccolto. Il suo ciclo di vita è piuttosto sofisticato, quindi non posso essere sicuro che tutti i riferimenti siano stati cancellati.Trova riferimenti all'oggetto in runtime
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);
Come posso scoprire che cosa riferimenti ce l'ha ancora? Perché non viene raccolto?
Mostraci il tuo codice e potremmo essere in grado di aiutarti. Ricorda che la garbage collection non avviene necessariamente immediatamente. – Lazarus
E immagino che la vera domanda sia, perché ti preoccupi di questo? Se si utilizzano risorse usa e getta, eliminarle quando non le si utilizza più, pulire le risorse di sistema non gestite e fare attenzione con l'internamento delle stringhe. –
Il codice è: se (container.Controls.Count> 0) { \t \t \t \t controlli var = new Control [container.Controls.Count]; \t \t \t \t container.Controls.CopyTo (controlli, 0); \t \t \t \t foreach (var controllo nei controlli) { \t \t \t \t \t container.Controls.Remove (controllo); \t \t \t \t \t control.Dispose(); \t \t \t \t \t \t \t \t \t} \t \t \t \t controlli = null; \t \t \t} GC.Collect(); GC.Collect (1); GC.Collect (2); GC.Collect (3); Ma è ancora in memoria. Così meens, che l'acciaio ha radici. Come posso trovare queste radici? –