sabato 22 giugno 2013

.NET - Errori comuni - Concatenazione di stringhe

Buongiorno a tutti.
oggi volevo condividere con voi uno di quegli "errori" che comunemente si commettono nella programmazione .NET. La concatenazione di stringhe. Spesso, per distrazione o per fretta, la concatenazione di stringhe viene fatta in ambiente .NET usando l'operatore "+". Il risultato che si ottiene è ovviamente quello desiderato, ma potrebbe avere gravi ripercussioni sulle performance del nostro applicativo. Mi spiego meglio:


  • Nel framework .NET le stringhe sono oggetti IMMUTABILI e pertanto le operazioni di modifica ad esse applicate non modificano la stringa di partenza, ma ne creano una nuova.
  • L'oggetto che deve essere usato per la manipolazione delle stringhe è "System.Text.StringBuilder", il quale non lavora con stringhe, ma con Stream di dati.

provate a creare una Console Application e sostituire il metodo main con il seguente:


 static void Main(string[] args)
        {
            /* test with + operator */
            DateTime start = System.DateTime.Now;

            string resultString = string.Empty;

            for (int i = 0; i < 50000; i++)
            {
                resultString += "123456789abcdefghilmnopqrstuvz";
            }
            TimeSpan t = (System.DateTime.Now - start);

            Console.WriteLine(string.Format("Test with + operator. Time : {0}:{1}:{2}:{3}", t.Hours, t.Minutes, t.Seconds, t.Milliseconds));


            /* Test with StringBuilder */
            start = System.DateTime.Now;

            StringBuilder resultStringBuilder = new StringBuilder();

            t = (System.DateTime.Now - start);
            
            for (int i = 0; i < 50000; i++)
            {
                resultStringBuilder.Append("123456789abcdefghilmnopqrstuvz");
            }

            Console.WriteLine(string.Format("Test with StringBuilder. Time : {0}:{1}:{2}:{3}", t.Hours, t.Minutes, t.Seconds, t.Milliseconds));

            Console.ReadLine();
        }


il risultato ottenuto sul mio computer è il seguente:


Senza parole vero?


Nessun commento:

Posta un commento