Optimizando nuestro codigo C# – Sobre Strings « Devthisblog

Devthisblog Desarrollo .net, Diseño Web, Seguridad… Y todo lo que se me vaya ocurriendo…

Noviembre 8, 2016

Optimizando nuestro codigo C# – Sobre Strings

Filed under: .net,ASP.Net,Curso C#,MVC4 — Etiquetas: , , , — jnavero @ 9:25 pm

En el post de hoy voy a hablar un poco sobre los strings y su correcto uso (buenas practicas).
Quizá puedan ser cosas obvias, pero, bueno, nunca está de mas poner este tipo de cosas.

Concatenación de Strings

¿Como concatenar un string?

 C# | 
 
 copy code |
?

1
var foo = fooo + foooooo;

Toda la vida hemos hecho esto lo cual es correcto.
Ahora bien, si queremos hacer una concatenación dentro de un for, la cosa cambia.
Para empezar veamos el siguiente ejemplo:

 C# | 
 
 copy code |
?

1
2
            string foo = null;
3
 
4
            for (int i = 0; i < 500000; i++)
5
            {
6
                foo += i.ToString();
7
            }
8

En este caso, si las iteraciones que tenemos son mínimas, no hay problema, pero si al contrario son un muchas, ese código se puede mejorar.

Pero, ¿Cual es el problema?
En realidad, cuando hacemos la concatenación de esta forma, foo tiene que crearse cada vez con el nuevo string desechando el anterior.
Esto hace que entre en funcionamiento el Garbage Collector, pero, no solo eso se almacena el string anterior y el nuevo string en memoria y hace que ocupe muchísimo mas espacio (en memoria) y tiempo de uso de la CPU.

NOTA: Es posible que haga un post hablando del funcionamiento del Garbage Collector. (En realidad, al hacer las concatenaciones así los objetos grandes se almacenan en el Large Object Heap y como son “grandes” el collector de basura no los limpia con la misma frecuencia y pueden estar un ratazo en memoria haciendo que ocupe mas espacio, (en fin una cosa chunga).

concatenando string

En conclusión hay que utilizar StringBuilder. Por lo que el código anterior quedaría de la siguiente forma:

 C# | 
 
 copy code |
?

1
2
            var sb = new StringBuilder();
3
            for (int i = 0; i < 500000; i++)
4
            {
5
                sb.Append(i.ToString());
6
            }
7

Para concluir esta parte, pues, ¿Cuando usar una cosa o la otra? pues con sentido común 🙂

Normalización de strings

Según las buenas practicas de Microsoft, hay que usar String.ToUpperInvariant en lugar de String.ToLowerInvariant.

Aquí he de decir, que habrá que hacer caso a la recomendación aunque no he visto ninguna diferencia entre ninguna de las dos funciones.

Aquí concluyo el post, espero que os haya gustado, mas adelante iré haciendo otros post de buenas practicas optimización ect.

No hay comentarios »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress