Estoy confundido sobre el proceso de recolección de basura en los objetos.¿Cómo funciona la recolección de basura en las referencias de objetos?
object A = new object();
object B = A;
B.Dispose();
de prepago de una Dispose en la variable B solamente, el objeto creado no será basura recogida que el objeto está todavía ha referenciado por A.
Ahora hace lo siguiente código funcione igual que el anterior?
public static image Test1()
{
Bitmap A = new Bitmap();
return A;
}
Ahora llamo a esta función estática de algún otro método.
public void TestB()
{
Bitmap B = Test1();
B.Dispose();
}
La función estática Test1 devolvió una referencia al objeto Bitmap. La referencia se guarda en otra variable B. Al invocar un Dispose on B, la conexión entre B y el objeto se pierde, pero lo que ocurre con la referencia que se pasa desde Test1. ¿Permanecerá activo hasta que se complete el alcance de la función TestB?
¿Hay alguna manera de eliminar inmediatamente la referencia que se pasa de la función estática?
basura la colección no es un conteo de referencias. –
El objetivo de la recolección de basura es que no tiene que preocuparse de cuándo o si se está liberando la memoria. En principio, en un sistema con grandes reservas de memoria, la recolección de basura nunca podría suceder, simplemente porque sería más eficiente simplemente dejar que todo se limpie cuando la aplicación finalice. –