DEBATE: Vale la pena asignar a NULL ¿Si? ¿No?

05/03/2008 - 17:31 por El Cote | Informe spam
Éste es un mensaje de varias partes en formato MIME.
=_NextPart_000_0012_01C87EB4.802328A0

Hola compañeros...

¿Tiene algún sentido asignar a los objetos locales de un método el valor NULL cuando ya no se necesitan a sabiendas que estas mueren y quedan inalcanzables cuando termina el método?

EJEMPLO 1:
private void HacerAlgo()
{
string[] nombres = { "pedro", "juan", "mar¡a", "jes£s" };

//
// AQUÍ SE HACE ALGO CON EL ARREGLO "nombres"
//

// aquí se eliminan los elementos y se asigna a null el arreglo ¿TIENE SENTIDO HACER ESTO?
Array.Resize<string>(ref nombres, 0);
nombres = null;
}

EJEMPLO 2:
private void HacerAlgo()
{
List<int> numeros = new List<int>();
numeros.Add(1);
numeros.Add(2);
numeros.Add(3);
numeros.Add(4);
numeros.Add(5);

//
// AQUÍ SE HACE ALGO CON LA LISTA GENRICA "numeros"
//

// aquí se eliminan los elementos y se asigna a null la lista genérica ¿TIENE SENTIDO HACER ESTO?
numeros.Clear();
numeros = null;
}

Gracias por su colaboración
=_NextPart_000_0012_01C87EB4.802328A0

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content=text/html;charset=iso-8859-1>
<META content="MSHTML 6.00.6000.16608" name=GENERATOR></HEAD>
<BODY id=MailContainerBody
style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-TOP: 15px"
bgColor=#ffffff leftMargin=0 topMargin=0 CanvasTabStop="true"
name="Compose message area">
<DIV><FONT face=Arial size=2>Hola compañeros...</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>¿Tiene algún sentido asignar&nbsp;a los objetos
locales de un método el valor NULL cuando ya no se necesitan a sabiendas que
estas mueren y quedan inalcanzables cuando termina el método?</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><STRONG><U>EJEMPLO 1:</U></STRONG></FONT></DIV>
<DIV><FONT color=#0000ff size=2><FONT face=Courier>private</FONT></FONT><FONT
face=Courier><FONT size=2> </FONT><FONT color=#0000ff
size=2>void</FONT></FONT><FONT size=2><FONT face=Courier>
HacerAlgo()</FONT></FONT></DIV>
<DIV><FONT size=2><FONT face=Courier>{</FONT></FONT></DIV>
<DIV><FONT face=Courier><FONT color=#0000ff
size=2>&nbsp;&nbsp;&nbsp;&nbsp;string</FONT><FONT size=2>[] nombres = {
</FONT><FONT color=#a31515 size=2>"pedro"</FONT><FONT size=2>, </FONT><FONT
color=#a31515 size=2>"juan"</FONT><FONT size=2>, </FONT><FONT color=#a31515
size=2>"mar¡a"</FONT><FONT size=2>, </FONT><FONT color=#a31515
size=2>"jes£s"</FONT></FONT><FONT size=2><FONT face=Courier>
};</FONT></FONT></DIV>
<DIV><FONT face=Courier size=2></FONT>&nbsp;</DIV>
<DIV><FONT color=#008000 size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;//</FONT></FONT></DIV>
<DIV><FONT color=#008000 size=2><FONT face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;//
AQUÍ SE HACE ALGO CON EL ARREGLO "nombres"</FONT></FONT></DIV>
<DIV><FONT color=#008000 size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;//</FONT></FONT></DIV>
<DIV><FONT face=Courier color=#008000 size=2></FONT>&nbsp;</DIV>
<DIV><FONT color=#008000 size=2><FONT face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;//
aquí se eliminan los elementos y se asigna a null el arreglo <STRONG><FONT
color=#ff0000>¿TIENE SENTIDO HACER ESTO?</FONT></STRONG></FONT></FONT></DIV>
<DIV><FONT face=Courier><FONT color=#2b91af
size=2>&nbsp;&nbsp;&nbsp;&nbsp;Array</FONT><FONT size=2>.Resize&lt;</FONT><FONT
color=#0000ff size=2>string</FONT><FONT size=2>&gt;(</FONT><FONT color=#0000ff
size=2>ref</FONT></FONT><FONT size=2><FONT face=Courier> nombres,
0);</FONT></FONT></DIV>
<DIV><FONT size=2><FONT face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;nombres =
</FONT></FONT><FONT face=Courier color=#0000ff size=2>null</FONT><FONT
size=2><FONT face=Courier>;</FONT></FONT></DIV>
<DIV><FONT size=2><FONT face=Courier>}</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><STRONG><U>EJEMPLO 2:</U></STRONG></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT color=#0000ff size=2><FONT
face=Courier>private</FONT></FONT><FONT face=Courier><FONT size=2> </FONT><FONT
color=#0000ff size=2>void</FONT></FONT><FONT size=2><FONT face=Courier>
HacerAlgo()</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT size=2><FONT
face=Courier>{</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT face=Courier><FONT color=#2b91af
size=2>&nbsp;&nbsp;&nbsp;&nbsp;List</FONT><FONT size=2>&lt;</FONT><FONT
color=#0000ff size=2>int</FONT><FONT size=2>&gt; numeros = </FONT><FONT
color=#0000ff size=2>new</FONT><FONT size=2> </FONT><FONT color=#2b91af
size=2>List</FONT><FONT size=2>&lt;</FONT><FONT color=#0000ff
size=2>int</FONT></FONT><FONT size=2><FONT
face=Courier>&gt;();</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;numeros.Add(1);</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;numeros.Add(2);</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;numeros.Add(3);</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;numeros.Add(4);</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;numeros.Add(5);</FONT></FONT></FONT></DIV>
<DIV><FONT face=Courier size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><FONT color=#008000 size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;//</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT color=#008000 size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;// AQUÍ SE HACE ALGO CON LA LISTA GENRICA
"numeros"</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT color=#008000 size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;//</FONT></FONT></FONT></DIV>
<DIV><FONT face=Courier color=#008000 size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><FONT color=#008000 size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;// aquí se eliminan los elementos y se
asigna a null la lista genérica <STRONG><FONT color=#ff0000>¿TIENE SENTIDO HACER
ESTO?</FONT></STRONG></FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;numeros.Clear();</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;numeros = </FONT></FONT><FONT face=Courier
color=#0000ff size=2>null</FONT><FONT size=2><FONT
face=Courier>;</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT size=2><FONT
face=Courier>}</FONT></DIV></FONT></FONT>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Gracias por su
colaboración</FONT></DIV></BODY></HTML>

=_NextPart_000_0012_01C87EB4.802328A0--
 

Leer las respuestas

#1 DarkSpy
13/03/2008 - 16:17 | Informe spam
On 5 mar, 13:31, "El Cote" wrote:
Hola compañeros...

¿Tiene algún sentido asignar a los objetos locales de un método el valor NULL cuando ya no se necesitan a sabiendas que estas mueren y quedan inalcanzables cuando termina el método?

EJEMPLO 1:
private void HacerAlgo()
{
string[] nombres = { "pedro", "juan", "mar¡a", "jes£s" };

//
// AQUÍ SE HACE ALGO CON EL ARREGLO "nombres"
//

// aquí se eliminan los elementos y se asigna a null el arreglo ¿TIENE SENTIDO HACER ESTO?
Array.Resize<string>(ref nombres, 0);
nombres = null;

}

EJEMPLO 2:
private void HacerAlgo()
{
List<int> numeros = new List<int>();
numeros.Add(1);
numeros.Add(2);
numeros.Add(3);
numeros.Add(4);
numeros.Add(5);

//
// AQUÍ SE HACE ALGO CON LA LISTA GEN RICA "numeros"
//

// aquí se eliminan los elementos y se asigna a null la lista genérica ¿TIENE SENTIDO HACER ESTO?
numeros.Clear();
numeros = null;

}

Gracias por su colaboración



Sólo estarás vaciando el contenido de los objetos que estés usando y
con eso liberarás algo de memoria. Yo no me complicaría tanto a ese
nivel, recuerda que el Garbage Collector igual se encargará de eso
cuando corresponda y la ganancia de performance sería mínima, si se
trata de otros objetos como conecciones a bases de datos o cosas más
grandes si es mejor limpiarlos.

Preguntas similares