[Programming] รวมเทคนิค Optimize Code ให้มีประสิทธิภาพดียิ่งขึ้น

สวัสดีเพื่อนๆ พบกันอีกแล้ว บล็อกนี้จะเขียนเรื่องการเพิ่มประสิทธิภาพโค๊ดให้ทำงานได้ดี และจะส่งผลให้โปรแกรมของเราเร็วขึ้น และใช้ทรัพยากรลดลงนั่นเอง โดยที่ตัวอย่างแอดมินจะใช้เป็นภาษา C# ก็แล้วกัน แต่ว่าหลักการก็จะคล้ายๆกันเกือบทุกภาษานั่นแหละ ไปดูกันเล๊ยย


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

พยายามใช้เลขที่เป็นสองยกกำลัง ในการกำหนดจองพื้นที่ Memory

Before

char playfield[80][25];

After

char playfield[80][32];


Information Credit :

Popular posts from this blog

วิธีตรวจสอบข้อมูลภาษีของตัวเอง รายได้ทั้งปี และค่าลดหย่อน จบครบที่เดียว

สูตรโกง Regex ใครไม่เก่ง Regular Expression มาทางนี้จ้า

คำถามจิตวิทยา และจริยธรรม เมื่อผมสามารถสับสวิตซ์รถไฟ และต้องเลือกชนใครสักคน

ฝากโค๊ด Online ด้วย Pastebin กันเถอะครับ !!

"yes" "yeah" "yep" เหมือนและต่างกันอย่างไร ?