String o StringBuilder?? He ahi el dilema!!!

|

Mas de una ves hemos escuchado: "Cuando necesitas concatenar usa StringBuilder a cambio de String", en Framework 1.0 y 1.1 era un poco molestoso por que StringBuilder no tenia la misma funcionalidad que un String (Funciones como Trim, Pad, Compare, etc...) ahora en Framework 2.0 esto ya es realidad!! Pero la verdadera razon es el consumo de memoria de un tipo String, y por que se da esto? Bien cada vez que se asigna un valor a una variable de tipo String o se realiza una operaion sobre la misma se reasigna memoria para que quepa adecuadamente en memoria y mas que nada no se produzcan ataques de tipo Buffer Overflow, ahora un ejemplo:

String strVar= "Salud";
strVar += " a todos";

Aqui podemos decir que normalemente con esta operacion lo que se hace es agregar la cadena al final, realmente no sucede asi, lo que pasa es que la cadena "Salud" es marcada para que sea recogida por el Garbage Collector y se crea espacio para una nueva variable de tipo String con el contenido final "Salud a todos" siendo esta una nueva variable almacenada en strVar, es decir cada ves que se concena String's se crea un nueva variable, tomando todo lo que se encuentra involucrado en rendimiento y memoria, imaginense esto en un trabajo repetitivo que se hace 1 millon de veces?? Costoso verdad??
A cambio se puede usar la funcion que veremos:

StrngBuilder strVar = new StringBuilder("Salud");
strVar.Append(" a todos");

Append agrega a la cadena que contiene "Salud" la cadena " a todos" asegurandose de que no se produsca un Buffer Overflow y claro dentro tiene algunos trucos para que use correctamente la memoria...

Si bien no es lo mismo usar un operador que una funcion (en un proximo blog explicare que la verdad por detras si es lo mismo) y a veces toca cambiar un poco la logica pero est ahorra memoria y tiempo de procesamiento que en operaciones grandes si vamos a sentir (ejemplo ASP .NET)

Espero que les sirva!!!

0 comments: