2010-04-28 10 views

Respuesta

2

en .NET el Garbage Collector lo hará por usted! Pero en realidad puede depender de lo que quiere decir cuando escribe que ya no "necesita" su variable

11

No es así. Simplemente deje que la referencia salga del alcance y será automáticamente garbage-collected.

1

.NET tiene un recolector de basura incorporado. Es suficiente dejar de hacer referencia a la matriz o variable cuando no la necesite. No hay necesidad de una llamada de destrucción explícita.

5

En Ex .Net o cualquier lenguaje de basura recogida para el caso se debe soltar todas las referencias se mantienen fieles a ese objeto, y el recolector de basura finalmente lo recogerá:

int[] arr = new int[20]; 
    .... 
    // when no longer needed set all references to null 
    arr = null; 
    // also creating a new object will release the old one automatically if there are no more references to it 
    arr = new int[40]; // old array will be garbage collected 

También tenga en cuenta que no lo hace Necesita hacer esto cada vez, solo cuando explícitamente quiera liberar un objeto sin soltar su objeto principal o si la referencia es un campo estático. Además, no es necesario liberar objetos para variables locales (método) solo campos de clases o campos estáticos.

+0

muchas gracias! – Alexry

+2

Tenga en cuenta que tampoco necesita establecer la referencia a 'null'; JIT/Runtime conspirará para averiguar en qué punto el código ya no usará esa referencia; está muerto y se puede coleccionar en ese punto. Google para las descripciones de 'GC.KeepAlive()' en los blogs de MSDN y aquí en SO para más detalles. –

+1

@Alexry, bienvenido, al igual que @Michael Burr dijo, es * extremadamente raro * en .Net que necesite anular manualmente una variable, por lo general no necesita hacer esto. –

1

Garbage-Collector es increíble, pero el objeto se destruye efectivamente cuando el Garbage-Collector recoge los objetos que ya no se referencian: más adelante ... Si necesita que el objeto se elimine immediateli para que se llame el código de destrucción , deberás implementar la interfaz IDisposable y llamar al método Dispose antes de desreferenciar tu objeto.

Cuestiones relacionadas