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; } } }จากผลลัพธ์จะเห็นว่าการใช้คลาส StringBuilder มีความไวกว่าการต่อ string ธรรมดา แต่ถ้าในกรณีที่เราไม่ได้ต่อ string จำนวนมากๆแล้ว ก็ไม่จำเป็นที่จะต้องใช้คลาสนี้ก็ได้ครับเขียนแบบธรรมดาไปเลยง่ายกว่า การเลือกใช้ต้องขึ้นอยู่กับว่าข้อมูลของเราว่ามีมากแค่ไหน
21 August 2015
C# StringBuilder เหนือกว่าต่อ string ธรรมดา
เวลาเขียนโปรแกรมแล้วมีการต่อ string หลายๆคนอาจจะคุ้นชินกับการเขียนแบบ text = text + newText หรือ text += newText ส่วนตัวผมจะเขียนแบบหลังซะส่วนใหญ่ แต่ถ้าเวลาที่เราต้องเจอเคสที่ต้องต่อ string จำนวนมากๆเข้า ก็จะเริ่มรู้สึกว่าโปรแกรมเราทำงานช้าลง แต่มันยังมีอีกวิธีที่บางคนอาจจะยังไม่ทราบหรือเคยเห็นแล้วแต่ก็ไม่ได้สนใจอะไร นั่นคือการใช้คลาส StringBuilder คราวนี้ผมจะลองเขียนเปรียบเทียบระหว่างการใช้คลาส StringBuilder กับการต่อ string ธรรมดาที่เราคุ้นชินโดยจะมีการจับเวลาของการทำงานในแต่ละแบบ ดัง code ตัวอย่างครับ