เมื่อคุณเข้าใจการจัดการหน่วยความจำของ Android และตั้งค่าเครื่องมือเพื่อวัดการใช้หน่วยความจำของเกมแล้ว ขั้นตอนถัดไปคือการลดและเพิ่มประสิทธิภาพการใช้หน่วยความจำอย่างจริงจัง การใช้งานหน่วยความจำให้อยู่ในขีดจำกัดที่เข้มงวดของ Android จะช่วยป้องกันไม่ให้ระบบปิดเกม หยุดเวลาเริ่มต้นที่ยาวนาน และทำให้เกมทำงานได้ดีในทุกอุปกรณ์
คู่มือนี้จะนำเสนอเทคนิคที่ใช้งานได้จริงเพื่อลดการใช้หน่วยความจำที่ใช้ของเกม โดยเน้นที่การเพิ่มประสิทธิภาพระดับชิ้นงาน การกำหนดค่าเฉพาะเอนจิน และแนวทางปฏิบัติแนะนำสำหรับการจัดการหน่วยความจำ
ลดหน่วยความจำใน Unity
เนื่องจากการออกแบบสถาปัตยกรรมของ Unity เมื่อตัวจัดสรรบล็อกดั้งเดิมและฮีปที่มีการจัดการขยายออก เอนจินมักจะเก็บเพจหน่วยความจำเหล่านั้นไว้เพื่อนำกลับมาใช้ใหม่แทนที่จะส่งคืนไปยังระบบปฏิบัติการ (OS) ทันที แม้หลังจากที่เผยแพร่ชิ้นงานแล้วก็ตาม โดยเฉพาะอย่างยิ่ง พื้นที่อยู่เสมือน (หน่วยความจำที่สงวนไว้) จะยังคงสงวนไว้ตลอดอายุการใช้งานของกระบวนการ และระบบจะไม่เรียกคืนหน่วยความจำจริง (RSS) ทันทีจนกว่าจะมีการเก็บกวาดหน่วยความจำ (GC) และรอบการลดขนาดหลายรอบ ด้วยเหตุนี้ การใช้หน่วยความจำสูงสุดชั่วคราวอาจทำให้หน่วยความจำภายในยังคงสูงเป็นเวลานานแม้หลังจากที่การใช้งานจริงลดลงแล้วก็ตาม ลักษณะการทำงานนี้จะเพิ่มความเสี่ยงของการขัดข้องเนื่องจากหน่วยความจำไม่เพียงพอ (OOM) ในอุปกรณ์ระดับล่าง และลดเสถียรภาพโดยรวมของรันไทม์
ดังนั้น การเพิ่มประสิทธิภาพหน่วยความจำของ Unity จึงต้องดำเนินการผ่าน 3 เสาหลักที่ปรับให้เหมาะกับลักษณะการทำงานของเอนจินเหล่านี้
- ควบคุมการใช้งานหน่วยความจำที่ใช้งานอยู่เพื่อป้องกันไม่ให้หน่วยความจำเพิ่มขึ้นสูงสุดตั้งแต่แรก
- จัดการรูปแบบเท็กซ์เจอร์และตัวแปรของเชเดอร์เพื่อให้แน่ใจว่าจะไม่มีการสร้างอินสแตนซ์ของชิ้นงานและทรัพยากรดั้งเดิมที่ไม่จำเป็น
- ปรับโครงสร้างโค้ดรันไทม์ใหม่เพื่อขจัดการจัดสรรที่ไม่จำเป็นในฮีปที่มีการจัดการเพื่อลดความถี่ของ GC และการขยายฮีป
ดูข้อมูลเพิ่มเติมได้ที่ การเพิ่มประสิทธิภาพหน่วยความจำของ Unity