ในบรรดาเทคนิคมากมายในการปรับขนาดโค้ดโปรแกรมให้เหมาะสม ส่วนใหญ่รวมถึงการลบองค์ประกอบที่ไม่จำเป็นออกจากโค้ด Visual Basic จะลบองค์ประกอบบางอย่างโดยอัตโนมัติเมื่อรวบรวมแอปพลิเคชัน ไม่มีการจำกัดความยาวหรือจำนวนชื่อตัวระบุ ความคิดเห็น และบรรทัดว่าง เมื่อแอปพลิเคชันทำงานเป็นไฟล์ .EXE องค์ประกอบเหล่านี้จะไม่ส่งผลต่อขนาดหน่วยความจำที่แอปพลิเคชันครอบครอง องค์ประกอบอื่นๆ เช่น ตัวแปร แบบฟอร์ม และขั้นตอน จะใช้พื้นที่บางส่วนในหน่วยความจำ เป็นการดีกว่าที่จะปรับปรุงให้มีประสิทธิภาพมากขึ้น ต่อไปนี้จะแนะนำ 6 วิธีที่สามารถใช้เพื่อลดหน่วยความจำที่แอปพลิเคชันต้องการและลดขนาดโค้ด ฉันหวังว่ามันจะเป็นประโยชน์สำหรับผู้เริ่มต้น
1. ลดจำนวนการโหลดแบบฟอร์มและการควบคุม และใช้ป้ายกำกับแทนกล่องข้อความ
แต่ละแบบฟอร์มที่โหลด ไม่ว่าจะมองเห็นหรือไม่ก็ตาม จะใช้หน่วยความจำจำนวนหนึ่ง (จำนวนจะแตกต่างกันไปขึ้นอยู่กับชนิดและจำนวนของตัวควบคุมบนแบบฟอร์ม ขนาดของบิตแมปบนแบบฟอร์ม ฯลฯ) โหลดแบบฟอร์มเมื่อคุณต้องการแสดงเท่านั้น และยกเลิกการโหลดแบบฟอร์มเมื่อไม่ต้องการอีกต่อไป (แทนที่จะซ่อนแบบฟอร์ม) โปรดจำไว้ว่า การอ้างอิงถึงคุณสมบัติ วิธีการ หรือตัวควบคุมของฟอร์ม หรือตัวแปรของฟอร์มที่ประกาศด้วย New จะทำให้ Visual Basic โหลดฟอร์ม
เมื่อใช้วิธีการยกเลิกการโหลดเพื่อยกเลิกการโหลดแบบฟอร์ม จะสามารถปล่อยพื้นที่เพียงบางส่วนที่แบบฟอร์มครอบครองเท่านั้น หากต้องการเพิ่มพื้นที่ว่างทั้งหมด ให้ใช้คีย์เวิร์ด Nothing เพื่อทำให้การอ้างอิงของแบบฟอร์มเป็นโมฆะ:
เมื่อออกแบบแอปพลิเคชัน ฟอร์มควรใช้ตัวควบคุมน้อยที่สุดเท่าที่จะเป็นไปได้ ขีดจำกัดที่แท้จริงขึ้นอยู่กับประเภทของการควบคุมและระบบ แต่ในทางปฏิบัติ แบบฟอร์มที่มีตัวควบคุมจำนวนมากจะทำงานช้า เทคนิคที่เกี่ยวข้องคือการใช้อาร์เรย์ของตัวควบคุมทุกครั้งที่เป็นไปได้เมื่อออกแบบ แทนที่จะวางตัวควบคุมประเภทเดียวกันจำนวนมากบนแบบฟอร์ม อาร์เรย์ควบคุมคือกลุ่มของตัวควบคุมที่มีชื่อและประเภททั่วไป เหตุการณ์ของพวกเขาก็เหมือนกัน ในขณะออกแบบ การเพิ่มตัวควบคุมโดยใช้อาร์เรย์ควบคุมจะใช้ทรัพยากรน้อยกว่าการเพิ่มตัวควบคุมชนิดเดียวกันหลายตัวลงในแบบฟอร์มโดยตรง อาร์เรย์ควบคุมยังมีประโยชน์เมื่อคุณต้องการให้ตัวควบคุมหลายตัวแชร์โค้ด ตัวควบคุมป้ายกำกับ ป้ายกำกับใช้ทรัพยากร Windows น้อยกว่ากล่องข้อความ กล่องข้อความ ดังนั้นเมื่อเป็นไปได้ ควรใช้ป้ายกำกับแทนกล่องข้อความ ตัวอย่างเช่น เมื่อตัวควบคุมที่ซ่อนอยู่ในฟอร์มจำเป็นต้องเก็บข้อความ การใช้ป้ายกำกับจะมีประสิทธิภาพมากกว่า
2. ใช้ไฟล์ดิสก์หรือทรัพยากรและโมดูลองค์กร
ข้อมูลที่วางลงในแอปพลิเคชันโดยตรง ณ เวลาออกแบบ (เช่น สตริงตัวอักษรและค่าในคุณสมบัติหรือโค้ด) จะเพิ่มหน่วยความจำที่แอปพลิเคชันครอบครองขณะรันไทม์ การโหลดข้อมูลจากไฟล์ดิสก์หรือทรัพยากรขณะรันไทม์จะช่วยลดการใช้หน่วยความจำ สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับบิตแมปและสตริงขนาดใหญ่ จริงๆ แล้วไฟล์ทรัพยากรประกอบด้วยชุดของสตริงอิสระ บิตแมป หรือรายการอื่นๆ ซึ่งแต่ละชุดมีตัวระบุที่ไม่ซ้ำกัน ไฟล์ทรัพยากรสามารถสร้างขึ้นได้โดยใช้โปรแกรมแก้ไขข้อความและคอมไพเลอร์ทรัพยากรคล้ายกับที่มีให้ใน Microsoft Visual C ไฟล์ทรัพยากรที่คอมไพล์แล้วจะมีนามสกุล .res
Visual Basic จะโหลดโมดูลเมื่อจำเป็นเท่านั้น นั่นคือ เมื่อโค้ดเรียกขั้นตอนในโมดูล โมดูลจะถูกโหลดลงในหน่วยความจำ ถ้าไม่เคยมีการเรียกขั้นตอนในโมดูลเฉพาะ Visual Basic จะไม่โหลดโมดูล ดังนั้น พยายามใส่ขั้นตอนที่เกี่ยวข้องไว้ในโมดูลเดียวกัน และปล่อยให้ Visual Basic โหลดโมดูลเมื่อจำเป็นเท่านั้น
3. พิจารณาแทนที่ชนิดข้อมูล Variant
ประเภทข้อมูล Variant มีความยืดหยุ่นในการใช้งานอย่างมาก แต่ใช้หน่วยความจำมากกว่าประเภทข้อมูลอื่นๆ เมื่อคุณต้องการบีบอัดพื้นที่ส่วนเกินในแอปพลิเคชันของคุณ คุณควรพิจารณาแทนที่ตัวแปร Variant ด้วยประเภทข้อมูลอื่น โดยเฉพาะอย่างยิ่งการแทนที่อาร์เรย์ตัวแปร Variant
Variant แต่ละตัวมีขนาด 16 ไบต์ ในขณะที่ Integer มีขนาด 2 ไบต์ และ Double มีขนาด 8 ไบต์ ตัวแปรสตริงที่มีความยาวผันแปรจะใช้ขนาด 4 ไบต์บวก 1 ไบต์สำหรับแต่ละอักขระในสตริง เนื่องจากมีขนาดใหญ่มาก ตัวแปร Variant จึงน่ารำคาญเป็นพิเศษเมื่อใช้เป็นตัวแปรภายในเครื่องหรือเป็นอาร์กิวเมนต์ของโพรซีเดอร์ เนื่องจากตัวแปรเหล่านี้ใช้พื้นที่สแต็กเร็วเกินไป แต่ในบางกรณี การใช้ชนิดข้อมูลอื่นแทน Variant จะลดความยืดหยุ่น และต้องเพิ่มโค้ดเพิ่มเติมเพื่อชดเชยความยืดหยุ่นที่สูญเสียไป ผลลัพธ์ที่ได้คือไม่มีการลดขนาดลงอย่างแท้จริง
4. ใช้อาร์เรย์แบบไดนามิกและเรียกคืนหน่วยความจำเมื่อทำการลบ
ใช้อาร์เรย์แบบไดนามิกแทนอาร์เรย์คงที่ เมื่อไม่จำเป็นต้องใช้ข้อมูลของอาร์เรย์แบบไดนามิกอีกต่อไป ให้ใช้ Erase หรือ ReDimPReserve เพื่อละทิ้งข้อมูลที่ไม่จำเป็นและเรียกคืนหน่วยความจำที่ใช้โดยอาร์เรย์ ตัวอย่างเช่น ใช้รหัสต่อไปนี้เพื่อเรียกคืนพื้นที่ที่ใช้โดยอาร์เรย์แบบไดนามิก:
ที่นี่ Erase จะลบอาร์เรย์ทั้งหมด ในขณะที่ ReDimPreserve จะย่ออาร์เรย์ให้สั้นลงโดยไม่สูญเสียเนื้อหา:
การลบอาร์เรย์ที่มีขนาดคงที่จะไม่เรียกคืนพื้นที่ที่อาร์เรย์ครอบครอง แต่จะเป็นการล้างค่าออกจากแต่ละองค์ประกอบของอาร์เรย์ หากองค์ประกอบเป็นสตริง หรือ Variants ที่มีสตริงหรืออาร์เรย์ การลบอาร์เรย์จะเรียกคืนหน่วยความจำที่สตริงหรือ Variants ครอบครอง ไม่ใช่หน่วยความจำที่อาร์เรย์ครอบครองเอง
5. เรียกคืนพื้นที่ที่ใช้โดยตัวแปรสตริงหรือวัตถุ
เมื่อกระบวนการสิ้นสุดลง พื้นที่ที่ใช้โดยสตริงภายในเครื่อง (ไม่คงที่) และตัวแปรอาเรย์สามารถเรียกคืนได้โดยอัตโนมัติ อย่างไรก็ตาม ตัวแปรสตริงและอาเรย์ระดับโกลบอลและโมดูลจะยังคงอยู่จนกระทั่งสิ้นสุดโปรแกรมทั้งหมด หากคุณต้องการให้แอปพลิเคชันของคุณมีขนาดเล็กที่สุดเท่าที่จะเป็นไปได้ คุณต้องเรียกคืนพื้นที่ที่ตัวแปรเหล่านี้ใช้ให้ได้มากที่สุด การกำหนดสตริงที่มีความยาวเป็นศูนย์ให้กับตัวแปรสตริงจะเรียกคืนพื้นที่:
ในทำนองเดียวกัน การตั้งค่าตัวแปรอ็อบเจ็กต์เป็น Nothing จะเรียกคืนพื้นที่บางส่วน (แต่ไม่ใช่ทั้งหมด) ที่อ็อบเจ็กต์ใช้ ตัวอย่างเช่น หากต้องการลบตัวแปรอ็อบเจ็กต์ Form:
แม้ว่าคุณจะไม่ได้ใช้ตัวแปรแบบฟอร์มที่ชัดเจน คุณควรระมัดระวังในการยกเลิกการโหลดแบบฟอร์มที่ไม่ได้ใช้อีกต่อไป แทนที่จะซ่อนไว้เพียงอย่างเดียว
6. กำจัดโค้ดที่ไม่ทำงานและตัวแปรที่ไม่มีประโยชน์
ในขณะที่คุณพัฒนาและแก้ไขแอปพลิเคชันของคุณ คุณอาจเหลือโค้ดที่ไม่ทำงาน ซึ่งเป็นกระบวนการทั้งหมดในโค้ดของคุณที่ไม่ได้ถูกเรียกที่ไหนเลย อาจมีการประกาศตัวแปรที่ไม่ได้ใช้บางตัวด้วย แม้ว่า Visual Basic จะสามารถลบค่าคงที่ที่ไม่มีประโยชน์ได้จริงเมื่อสร้างไฟล์ .exe แต่ก็ไม่สามารถลบตัวแปรที่ไม่มีประโยชน์และโค้ดที่ไม่ทำงานได้ โปรดใช้ความระมัดระวังในการตรวจสอบโค้ดของคุณเพื่อค้นหาและลบตัวแปรที่ไม่มีประโยชน์และโค้ดที่ไม่ทำงาน ตัวอย่างเช่น คำสั่ง Debug.Print จะถูกละเว้นเมื่อเรียกใช้ .exe แต่มักจะปรากฏในไฟล์ .exe
เมื่อสร้างไฟล์ .exe คำสั่ง Debug.Print ที่มีสตริงและตัวแปรเป็นพารามิเตอร์จะไม่ถูกคอมไพล์ แต่สำหรับคำสั่ง Debug.Print ที่มีฟังก์ชันเป็นพารามิเตอร์ ตัวคอมไพเลอร์จะละเว้นและฟังก์ชันจะถูกคอมไพล์ ดังนั้นในขณะที่แอปพลิเคชันกำลังทำงานอยู่ ฟังก์ชันจะถูกเรียกใช้แต่ค่าที่ส่งคืนจะถูกละเว้น เนื่องจากในไฟล์ .exe เมื่อฟังก์ชันปรากฏเป็นพารามิเตอร์ของ Debug.Print จะใช้พื้นที่และรอบเวลาของ CPU ดังนั้นจึงเป็นการดีที่สุดที่จะลบคำสั่งเหล่านี้ก่อนที่จะสร้างไฟล์ exe
ใช้คำสั่งค้นหาในเมนูแก้ไขเพื่อค้นหาการอ้างอิงถึงตัวแปรเฉพาะ หรือเมื่อแต่ละโมดูลมีคำสั่ง OptionExplicit คุณสามารถดูได้อย่างรวดเร็วว่ามีการใช้ตัวแปรหรือไม่โดยการลบหรือแสดงความคิดเห็นในการประกาศตัวแปรและเรียกใช้แอปพลิเคชัน ถ้ามีการใช้ตัวแปรนี้ Visual Basic จะเกิดข้อผิดพลาด หากไม่มีข้อผิดพลาดเกิดขึ้น ตัวแปรจะไม่ถูกใช้ -