El StringBuilder

En el mundo web, es muy común el tener que trabajar con largas cadenas de texto.

Habitualmente se trabaja(ba) concatenando diferentes strings o reescribiendo el mismo string una y otra vez. Ambos modos son malos para el rendimiento de nuestra aplicación, dado que cada vez que lo hacemos se crea una instancia string bastante molesta.

Con StringBuilder ya no sólo se mejora el rendimiento considerablemente, sino que tenemos una manera más elegante y más "humana" para trabajar con largos strings.

Pero vayamos con un ejemplo simple con los dos modos malos (hay que importar el namespace System.Text):

    public string ejemploStrings1()
    {
        string s1 = "No es más fuerte el que no se cae, ";
        string s2 = "sino el que al caerse ";
        string s3 = "vuelve a levantarse con más fuerza ";
        string s4 = "y la lección aprendida";

        return s1 + s2 + s3 + s4;
    }


    public string ejemploStrings2()
    {
        string s = "No es más fuerte el que no se cae, ";
        s += "sino el que al caerse ";
        s += "vuelve a levantarse con más fuerza ";
        s += "y la lección aprendida";

        return s;
    }


El modo de hacerlo con un StringBuilder sería el siguiente:

    public string ejemploStringBuilder1()
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("No es más fuerte el que no se cae, ");
        sb.Append("sino el que al caerse ");
        sb.Append("vuelve a levantarse con más fuerza ");
        sb.Append("y la lección aprendida");

        return sb.ToString();
    }


Como veis es un ejemplo terriblemente sencillo. Fijaos que para devolver el string que alamcena el StringBuilder debe hacerse un .ToString().

Cuando le cojais el gustillo, probad otras cosillas como sb.AppendFormat(...) o sb.AppendLine(...), donde el primero permite darle un formato al string que se inserte y el segundo inserta una línea (el equivalente de \n).

Además, sb.Append(variable) no sólo no obliga a que variable sea un string, sino que permite un montón de tipos de datos: chars, arrays de chars, double, int, bool, etc.

Ahora es cuestión de vuestra imaginación saber aprovechar esta herramienta, personalmente yo ya la uso para todo lo que sea el trabajo con más de un string