[Programming] รวมเทคนิค Optimize Code ให้มีประสิทธิภาพดียิ่งขึ้น
สวัสดีเพื่อนๆ พบกันอีกแล้ว บล็อกนี้จะเขียนเรื่องการเพิ่มประสิทธิภาพโค๊ดให้ทำงานได้ดี และจะส่งผลให้โปรแกรมของเราเร็วขึ้น และใช้ทรัพยากรลดลงนั่นเอง โดยที่ตัวอย่างแอดมินจะใช้เป็นภาษา C# ก็แล้วกัน แต่ว่าหลักการก็จะคล้ายๆกันเกือบทุกภาษานั่นแหละ ไปดูกันเล๊ยย
แต่ใช่ว่าจะให้เลิกใช้ String ธรรมดานะครับ คือต้องเลือกใช้ ถ้าเป็นข้อความสั้นๆ ไม่ยาวนักใช้ String จะเหมาะสมกว่าและมีประสิทธิภาพดีกว่า
ลองทดสอบความเร็วในการใช้งานทั้งสองแบบด้วยวิธีนี้ครับ
ซึ่งจะเห็นได้ว่าเราต้องเรียก ToLower() ถึง 2 ครั้ง การจะทำให้โค๊ดมีประสิทธิภาพขึ้น ทำแบบนี้ครับ
โดยมันจะคืนค่า 0 เมื่อ String ทั้งสองมีค่าเท่ากัน
ลองเปลี่ยนมาใช้ String.Empty แบบนี้ครับ
เราสามารถ Check ค่าว่างด้วยวิธีเปรียบเทียบ String.length ว่าเท่ากับ 0 หรือเปล่าก็ได้ครับ เร็วกว่าเปรียบเทียบ String ด้วย
Before
After
Before
After
Before
After
Information Credit :
1. รู้จักกับ String และ String Builder
สำหรับ StringBuilder มันคือชนิดของข้อมูลชนิดหนึ่งซึ่งมีความสามารถในการต่อ String ที่มีความยาวมากๆได้รวดเร็วกว่าตัวแปร String ธรรมดา โดยหลักการการต่อ String ของ String ธรรมดาคือ การสร้างตัวแปรใหม่ในชื่อเดิม ยกตัวอย่างเช่น เราสร้าง String a = "Hello"; ต่อมาต้องการเพิ่มให้ a = "Hello" + " Admin" นี่แหละครับ มันคือการสร้างตัวแปร a ขึ้นมาใหม่โดยที่ a = "Hello" ก็ยังคงสร้างอยู่ใน Memory ลองนึกถึงการต่อ String ยาวๆดูสิ จะเกิด Temp ขยะเยอะมากแต่ใช่ว่าจะให้เลิกใช้ String ธรรมดานะครับ คือต้องเลือกใช้ ถ้าเป็นข้อความสั้นๆ ไม่ยาวนักใช้ String จะเหมาะสมกว่าและมีประสิทธิภาพดีกว่า
ลองทดสอบความเร็วในการใช้งานทั้งสองแบบด้วยวิธีนี้ครับ
2. Comparing Non-Case-Sensitive Strings
เวลาที่เราต้องการเปรียบเทียบ String ที่สามารถให้เป็นตัวใหญ่หรือตัวเล็กก็มีค่าเท่ากัน เรามักจะใช้str1.ToLower() == str2.ToLower()
ซึ่งจะเห็นได้ว่าเราต้องเรียก ToLower() ถึง 2 ครั้ง การจะทำให้โค๊ดมีประสิทธิภาพขึ้น ทำแบบนี้ครับ
string.Compare(str1, str2, true) == 0 //Ignoring cases
โดยมันจะคืนค่า 0 เมื่อ String ทั้งสองมีค่าเท่ากัน
3. Use string.Empty
เมื่อต้องการเปรียบเทียบค่าว่าง ปกติเรามักจะใช้if (str == "")
ลองเปลี่ยนมาใช้ String.Empty แบบนี้ครับ
if (str == String.Empty)
เราสามารถ Check ค่าว่างด้วยวิธีเปรียบเทียบ String.length ว่าเท่ากับ 0 หรือเปล่าก็ได้ครับ เร็วกว่าเปรียบเทียบ String ด้วย
4. Replace ArrayList with List<>
ใครที่เขียนโปรแกรมมาสักระยะ คงรู้จัก ArrayList กับ List กันดี ข้อแตกต่างของทั้งสองประเภทนี้คือ ArrayList สามารถเก็บข้อมูลได้หลายชนิด ต่างกับ List<type> ที่เราสามารถเก็บได้เฉพาะชนิดที่ระบุ ดังนั้นถ้าเราต้องการเก็บตัวแปรแค่ชนิดเดียวตายตัว ก็ใช้ List<> ไปเลยจะดีกว่า เพราะมันจะเร็วกว่าครับ5. Smart Try-Catch
พยายามใช้ Try-Catch เท่าที่จำเป็น ให้ใช้กับพวกการติดต่อ Database หรือฟังก์ชันที่อาจเกิด Error โดยไม่ทราบสาเหตุได้ อะไรพวกนี้จะเหมาะสมที่สุด นอกนั้นให้ใช้ if เอาครับ6. "Else" clause removal
ลดการใช้ else ลงBefore
if( Condition ) { Case A; } else { Case B; }
After
Case B; if( Condition ) { Undo Case B; Case A; }
7. Use finite differences to avoid multiplies
ถ้าเป็นไปได้ลดการใช้ การคูณ จะเพิ่มประสิทธิภาพโปรแกรมขึ้นอีกนิดนึงBefore
for(i=0;i<10;i++) { printf("%d\n",i*10); }
After
for(i=0;i<100;i+=10) { printf("%d\n",i); }
8. Use powers of two for multidimensional arrays
พยายามใช้เลขที่เป็นสองยกกำลัง ในการกำหนดจองพื้นที่ MemoryBefore
char playfield[80][25];
After
char playfield[80][32];
Information Credit :