String.Empty o ""

19/07/2008 - 14:34 por Carlos | Informe spam
Hay alguna diferencia en usar en una expresion: String.Empty o "" ?

Preguntas similare

Leer las respuestas

#6 Toful
20/07/2008 - 01:03 | Informe spam
Según ciertos blogs que he leído es siempre mejor utilizar
"string.empty" por los siguientes motivos.

1) Utilizar "" implica realizar "cambios internos" en tu objeto
string. ¿Qué ocurre si un objeto string que guarda, por ejemplo, un
nombre como "José", lo cambiamos un ponemos otro nombre, como
"Francisco"? La clase string automáticamente e internamente reserva
más memoría para almacenar un contenido mayor. Al usar, string.empty,
el objeto simplemente no ha reservado nada de memoria. Al utilizar ""
el objeto se instancia (porque se usa de él y empieza a ocupar
memoria, poca pero reserva)
2) Relacionado con el primer punto. A más reserva de memoria, más
lento ira mi aplicación porque la memoria es un recurso compartido.
Por lo que if (s1=="") es más lento que s1.Equals(string.Empty).
Aunque parece que la forma más rápida de comparar si un string esta
vacío es utilizar length==0.
3) Más velocidad por string.Empty es estático

Espero haber resuelto tus dudas,

Cristóbal Tello
http://www.usuaris.tinet.cat/ctg/
Respuesta Responder a este mensaje
#7 Carlos
20/07/2008 - 15:33 | Informe spam
Ok, lo tomare en cuenta y gracias tambien por la explicacion.


"Toful" wrote in message
news:
Según ciertos blogs que he leído es siempre mejor utilizar
"string.empty" por los siguientes motivos.

1) Utilizar "" implica realizar "cambios internos" en tu objeto
string. ¿Qué ocurre si un objeto string que guarda, por ejemplo, un
nombre como "José", lo cambiamos un ponemos otro nombre, como
"Francisco"? La clase string automáticamente e internamente reserva
más memoría para almacenar un contenido mayor. Al usar, string.empty,
el objeto simplemente no ha reservado nada de memoria. Al utilizar ""
el objeto se instancia (porque se usa de él y empieza a ocupar
memoria, poca pero reserva)
2) Relacionado con el primer punto. A más reserva de memoria, más
lento ira mi aplicación porque la memoria es un recurso compartido.
Por lo que if (s1=="") es más lento que s1.Equals(string.Empty).
Aunque parece que la forma más rápida de comparar si un string esta
vacío es utilizar length==0.
3) Más velocidad por string.Empty es estático

Espero haber resuelto tus dudas,

Cristóbal Tello
http://www.usuaris.tinet.cat/ctg/
Respuesta Responder a este mensaje
#8 Hernan
22/07/2008 - 13:02 | Informe spam
> Hay alguna diferencia en usar en una expresion:  String.Empty o "" ?

Corríganme si me equivoco.

Hasta donde sé, cada vez que empleamos las comillas (estén vacías o no)
se crea un nuevo objeto de tipo System.String. La idea de tener
string.Empty es inicializar nuestras variables de cadenas apuntando a un
único objeto string vacío. Es decir, cada que empleamos las comillas se
crearía un nuevo objeto string, mientras que si las asignamos a
string.Empty, solo tendríamos una instancia (string.Empty precísamente),
  con lo cuál nos ahorramos algo de memoria y quizás algo de 'performance'.

Yo siempre empleo string.Empty.



Es verdad que "" crea un objeto, pero la diferencia es mínima (la
velocidad
de creación de objetos de la máquina virtual de .NET es comparable a
C o C++). Encontrarás mas diferencia si usas string.Equals en vez de
=por lo que la comparación sería:
xxx.Equals(string.Empty)

Pero como han dicho antes lo mas performante es comparar por longitud
0.
Es lo que recomienda Microsoft y es lo que informa FxCop cuando
analiza
tu código.

En mi opinión, en estas situaciones lo mejor es acostumbrarse a
utilizar
unas pocas "construcciones idiomáticas" que sean fáciles de entender
para cualquiera que lea el código (la hora del programador es mas
costosa
que la de la CPU). En este caso particular uso solo dos:

variable == "" o variable.Length == 0

dependiendo de las ganas de micro-optimizar que tenga.

-Hernán.
Respuesta Responder a este mensaje
#9 RFOG
22/07/2008 - 13:12 | Informe spam
On Tue, 22 Jul 2008 13:02:37 +0200, Hernan wrote:

Es verdad que "" crea un objeto, pero la diferencia es mínima (la
velocidad
de creación de objetos de la máquina virtual de .NET es comparable a
C o C++). Encontrarás mas diferencia si usas string.Equals en vez de



A veces, cuando has fragmentado mucho la memoria en C++ (por ejemplo,
creando y destruyendo pequeños objetos sin mucho concierto, casi lo
habitual si no te andas con ojo), la asignación de memoria en .NET es
bastante más rápida que en C++ si dejas tiempo al recolector de basura a
que haga su trabajo en los tiempos muertos.


=> por lo que la comparación sería:
xxx.Equals(string.Empty)

Pero como han dicho antes lo mas performante es comparar por longitud
0.
Es lo que recomienda Microsoft y es lo que informa FxCop cuando
analiza
tu código.

En mi opinión, en estas situaciones lo mejor es acostumbrarse a
utilizar
unas pocas "construcciones idiomáticas" que sean fáciles de entender
para cualquiera que lea el código (la hora del programador es mas
costosa
que la de la CPU). En este caso particular uso solo dos:

variable == "" o variable.Length == 0

dependiendo de las ganas de micro-optimizar que tenga.

-Hernán.





Microsoft Visual C++ MVP
==Mi blog sobre programación: http://geeks.ms/blogs/rfog
Momentos Leves: http://momentosleves.blogspot.com/
Cosas mías: http://rfog.blogsome.com/
Libros, ciencia ficción y programación
El poder de moverse a sí mismo es la esencia del alma.
Respuesta Responder a este mensaje
#10 Carlos
22/07/2008 - 15:11 | Informe spam
Pero, el compilador no deberia ser mas habil y convertir todo a una misma
forma standard ? o lo hace?

"RFOG" wrote in message news:
On Tue, 22 Jul 2008 13:02:37 +0200, Hernan wrote:

Es verdad que "" crea un objeto, pero la diferencia es mínima (la
velocidad
de creación de objetos de la máquina virtual de .NET es comparable a
C o C++). Encontrarás mas diferencia si usas string.Equals en vez de



A veces, cuando has fragmentado mucho la memoria en C++ (por ejemplo,
creando y destruyendo pequeños objetos sin mucho concierto, casi lo
habitual si no te andas con ojo), la asignación de memoria en .NET es
bastante más rápida que en C++ si dejas tiempo al recolector de basura a
que haga su trabajo en los tiempos muertos.


=>> por lo que la comparación sería:
xxx.Equals(string.Empty)

Pero como han dicho antes lo mas performante es comparar por longitud
0.
Es lo que recomienda Microsoft y es lo que informa FxCop cuando
analiza
tu código.

En mi opinión, en estas situaciones lo mejor es acostumbrarse a
utilizar
unas pocas "construcciones idiomáticas" que sean fáciles de entender
para cualquiera que lea el código (la hora del programador es mas
costosa
que la de la CPU). En este caso particular uso solo dos:

variable == "" o variable.Length == 0

dependiendo de las ganas de micro-optimizar que tenga.

-Hernán.





Microsoft Visual C++ MVP
==> Mi blog sobre programación: http://geeks.ms/blogs/rfog
Momentos Leves: http://momentosleves.blogspot.com/
Cosas mías: http://rfog.blogsome.com/
Libros, ciencia ficción y programación
> El poder de moverse a sí mismo es la esencia del alma.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida