Mostrando entradas con la etiqueta String. Mostrar todas las entradas
Mostrando entradas con la etiqueta String. Mostrar todas las entradas

viernes, 6 de junio de 2008

Cadenas en .NET


Las cadenas del tipo System.String en .NET son inmutables. Esto quiere decir que cualquier cambio a una cadena provoca que el entorno de ejecución cree una nueva cadena y abandone la vieja. Esto es invisible, y muchos programadores se podrán asombrar al aprender que el siguiente código almacena cuatro nuevas cadenas en la memoria:


string s;

s = "Uno"; // "Uno"
s += " Dos"; // "Uno Dos"
s += " Tres"; // "Uno Dos Tres"
s += " Cuatro"; // "Uno Dos Tres Cuatro"
Console.WriteLine(s);

Sólo la última cadena tiene una referencia, las demás serán desechadas en el proceso de recolección de basura. Evitar este tipo de cadenas temporales ayuda a evitar recolección de basura innecesaria, lo que mejora la performance. Existen varias maneras de evitar las cadenas temporales:

  • Usar los métodos Concat, Join, o Format de la clase String para unir múltiples elementos en una sola declaración.

  • Usar la clase StringBuilder para crear cadenas dinámicas (mutables).


El uso de la clase StringBuilder es la solución más flexible. El siguiente código muesta el uso de la clase StringBuilder:


System.Text.StringBuilder sb = new System.Text.StringBuilder(30);
sb.Append("Uno"); // Construir la cadena
sb.Append(" Dos");
sb.Append(" Tres");
sb.Append(" Cuatro");
string s = sb.ToString(); // Copiar el resultado en la cadena
Console.WriteLine(s);