21 August 2015

C# StringBuilder เหนือกว่าต่อ string ธรรมดา

    เวลาเขียนโปรแกรมแล้วมีการต่อ string หลายๆคนอาจจะคุ้นชินกับการเขียนแบบ text = text + newText หรือ text += newText ส่วนตัวผมจะเขียนแบบหลังซะส่วนใหญ่ แต่ถ้าเวลาที่เราต้องเจอเคสที่ต้องต่อ string จำนวนมากๆเข้า ก็จะเริ่มรู้สึกว่าโปรแกรมเราทำงานช้าลง แต่มันยังมีอีกวิธีที่บางคนอาจจะยังไม่ทราบหรือเคยเห็นแล้วแต่ก็ไม่ได้สนใจอะไร นั่นคือการใช้คลาส StringBuilder คราวนี้ผมจะลองเขียนเปรียบเทียบระหว่างการใช้คลาส StringBuilder กับการต่อ string ธรรมดาที่เราคุ้นชินโดยจะมีการจับเวลาของการทำงานในแต่ละแบบ ดัง code ตัวอย่างครับ
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;

namespace ConsoleTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch sw1 = new Stopwatch();
            sw1.Start();
            UseStringBuilderClass();
            sw1.Stop();
            Console.WriteLine("UseStringBuilderClass " + sw1.ElapsedMilliseconds + " ms.");

            Stopwatch sw2 = new Stopwatch();
            sw2.Start();
            NotUseStringBuilderClass();
            sw2.Stop();
            Console.WriteLine("NotUseStringBuilderClass " + sw2.ElapsedMilliseconds + " ms.");

            Console.ReadKey();
        }

        static void UseStringBuilderClass()
        {
            StringBuilder str = new StringBuilder();
            for (int i = 0; i < 100000; i++) str.Append(i);
        }

        static void NotUseStringBuilderClass()
        {
            string str = "";
            for (int i = 0; i < 100000; i++) str += i;
        }
    }
}