Concat String ด้วยเครื่องหมาย +
1 | DateTime start = DateTime.Now; |
เนื่องจาก string เป็น immutable type ทุกครั้งที่ x += "!" ทำงานจะมีการสร้าง string ขึ้นใหม่ โดยคัดลอก string เดิมต่อกับเครื่องหมาย ! ไปเก็บใน memory ที่มีการ allocate ขึ้นใหม่ จากโค้ดข้างบนจะมีการคัดลอก string ถึง 100,000 ครั้ง แต่ละครั้งจะใช้เวลามากขึ้นเรื่อยๆ เนื่องจากจากขนาดของ string ยาวขึ้น
1 | Time taken: 00:00:09.3561040 |
Concat String ด้วย StringBuilder
1 | DateTime start = DateTime.Now; |
StringBuilder จะมี buffer อยู่ภายใน เมื่อมีการการต่อ string ด้วยฟังก์ชัน Append จะไม่จำเป็นต้องจอง memory ใหม่ทุกครั้ง แต่จะเกิดขึ้นเมื่อ memory หรือ buffer ที่มีอยู่ไม่พอ โดยจะเพิ่มขนาดของ buffer เป็นสองเท่าของขนาดเดิม จากโค้ดทั้งสองแบบ การใช้ StringBuilder จึงให้ประสิทธิภาพที่ดีกว่า
1 | Time taken: 00:00:00.0527960 |
Links